首页 > 系统相关 >RabbitMQ安装教程(linux与Docker)

RabbitMQ安装教程(linux与Docker)

时间:2022-09-08 07:44:20浏览次数:86  
标签:ConnectionFactory factory rabbitmq 5672 RabbitMQ linux Docker 链接

一.架构的演变过程

 

 

二.正确看待异步架构

1.优势

(1).削峰

降低了服务器的压力

(2).响应快

加快了服务器的响应速度,优化了用户体验

(3).降耦合

降低了服务器之间的耦合

(4).便于系统的升级

处理业务的时候,升级系统可以停用处理消息的服务器

 

2.劣势

(1).架构复杂

架构更加复杂,会依赖于队列(容器)

(2).及时性降低了

 

三.常见的队列

1.RabbitMQ

特点:使用频繁,上手快,易学

2.Redis

3.kafka

性能高,主要用于大型系统架构

 

 

四.Linux 内安装 RabbitMQ

1.安装erlang

 

A.检查是否安装了erlang环境
rpm -qa | grep erlang
B.卸载erlang
yum list | grep erlang
yun -y remove erlang-*
rm -rf /usr/lib64/erlang
C.设置仓储
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
D.安装erlang
yum install erlang
E.查看erlang版本号
erl

 

2.安装RabbitMQ

A.检查是否安装了RabbitMQ
rpm -qa | grep rabbitmq
B.卸载RabbitMQ
yum list | grep rabbitmq
yum -y remove rabbitmq-server.noarch
C.导入两个Key
rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
rpm --import https://packagecloud.io/gpg.key
D.下载包
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
E.下载
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.5/rabbitmq-server-3.8.5-1.el8.noarch.rpm
F.导入Key
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
G.添加RabbitMQ的依赖项
yum -y install epel-release
yum -y install socat
H.指定安装rabbitmq服务端
rpm -ivh rabbitmq-server-3.8.5-1.el8.noarch.rpm
I. 可视化RabbitMQ工具
rabbitmq-plugins enable rabbitmq_management 

 

(1).可以通过浏览器可视化

rabbitmq可视化端口:15672

rabbitmq链接端口:5672

http://宿主机IP:15672/#/queues
(2).创建管理员账户
rabbitmqctl add_user richard richard
(3).设置注册账号为管理员
rabbitmqctl set_user_tags richard administrator
J.启动
systemctl start rabbitmq-server
K.放开端口
firewall-cmd --add-port=15672/tcp --permanent
firewall-cmd --add-port=5672/tcp --permanent

#重启防火墙
firewall-cmd --reload

 

 

五.Docker内安装RabbitMQ

1.Docker仓储查询RabbitMQ的镜像

docker search rabbitmq

2.拉取RabbitMQ镜像

docker pull rabbitmq

3.通过镜像启动RabbitMQ容器

1.第一个映射端口是可视化端口号

2.第二个映射端口是链接端口号

docker run -d -name Yp_rabbitmq -p 15677:15672 -p 5677:5672 镜像ID

4.进入到RabbitMq容器内安装可视化插件

docker ps -a
docker exec -it 容器ID bash
rabbitmq-plugins enable rabbitmq_management

5.重启RabbitMQ容器

docker ps -a  
docker restart 容器ID

6.访问RabbitMQ可视化界面

A.地址: http://宿主机的IP:第三步指定可视化端口号

B.默认账号:guest

C.默认密码:guest

 

六.程序链接RabbitMQ

1.创建消息生产者

A.Nuget引入RabbitMQ Client

引入帮助类库

B.创建链接工厂
ConnectionFactory factory= new ConnectionFactory(); //创建链接工厂
factory.HostName = "192.168.1.21";
factory.UserName = "yangpeng";
factory.Password = "yangpeng";
factory.Port = 5672; //默认端口号是:5672
C.基于链接工厂创建链接

ConnectionFactory factory= new ConnectionFactory(); //创建链接工厂
factory.HostName = "192.168.1.21";
factory.UserName = "yangpeng";
factory.Password = "yangpeng";
factory.Port = 5672; //默认端口号是:5672

using (IConnection connection = factory.CreateConnection()) //创建链接
{
   
}
D.创建信道
ConnectionFactory factory= new ConnectionFactory(); //创建链接工厂
factory.HostName = "192.168.1.21";
factory.UserName = "yangpeng";
factory.Password = "yangpeng";
factory.Port = 5672; //默认端口号是:5672

using (IConnection connection = factory.CreateConnection()) //基于创建链接
{
  using (IModel channel = connection.CreateModel()) //基于链接创建信道
  {
       
  }
}
E.创建队列和交换机 绑定队列和交换机
ConnectionFactory factory= new ConnectionFactory(); //创建链接工厂
factory.HostName = "192.168.1.21";
factory.UserName = "yangpeng";
factory.Password = "yangpeng";
factory.Port = 5672; //默认端口号是:5672

using (IConnection connection = factory.CreateConnection())
{
  using (IModel channel = connection.CreateModel())
  {
      //创建队列
      channel.QueueDeclare(queue: "OnlyProducerMessage", durable: true, exclusive: false, autoDelete: false, arguments: null);
      //创建交换机
      channel.ExchangeDeclare(exchange: "OnlyProducerMessageExChange", type: ExchangeType.Direct, durable: true, autoDelete: false, arguments: null);
      //将队列和交换机绑定
      channel.QueueBind(queue: "OnlyProducerMessage", exchange: "OnlyProducerMessageExChange", routingKey: String.Empty, arguments: null);
  }
}
F.开始发送消息
ConnectionFactory factory= new ConnectionFactory(); //创建链接工厂
factory.HostName = "192.168.1.21";
factory.UserName = "yangpeng";
factory.Password = "yangpeng";
factory.Port = 5672; //默认端口号是:5672

using (IConnection connection = factory.CreateConnection())
{
  using (IModel channel = connection.CreateModel())
  {
      //创建队列
      channel.QueueDeclare(queue: "OnlyProducerMessage", durable: true, exclusive: false, autoDelete: false, arguments: null);
      //创建交换机
      channel.ExchangeDeclare(exchange: "OnlyProducerMessageExChange", type: ExchangeType.Direct, durable: true, autoDelete: false, arguments: null);
      //将队列和交换机绑定
      channel.QueueBind(queue: "OnlyProducerMessage", exchange: "OnlyProducerMessageExChange", routingKey: String.Empty, arguments: null);
   
      Console.ForegroundColor=ConsoleColor.Red;
      Console.WriteLine("生产者已经准备就绪");

      int i = 1;

      while (i <= 100)
      {
          string message = $"生成者发送第{i}条消息;";
          byte[] body=Encoding.UTF8.GetBytes(message);
          channel.BasicPublish(exchange: "OnlyProducerMessageExChange", routingKey: string.Empty, basicProperties: null, body: body);
          Console.WriteLine($"消息已发送{i}条");
          i++;
          Thread.Sleep(500);
      }
  }
}

2.创建消息消费者

 
ConnectionFactory factory= new ConnectionFactory(); //创建链接工厂
factory.HostName = "192.168.1.21";
factory.UserName = "yangpeng";
factory.Password = "yangpeng";
factory.Port = 5672; //默认端口号是:5672
C.基于链接工厂创建链接
ConnectionFactory factory= new ConnectionFactory(); //创建链接工厂
factory.HostName = "192.168.1.21";
factory.UserName = "yangpeng";
factory.Password = "yangpeng";
factory.Port = 5672; //默认端口号是:5672

using (IConnection connection = factory.CreateConnection()) //创建链接
{
   
}
D.创建信道
ConnectionFactory factory= new ConnectionFactory(); //创建链接工厂
factory.HostName = "192.168.1.21";
factory.UserName = "yangpeng";
factory.Password = "yangpeng";
factory.Port = 5672; //默认端口号是:5672

using (IConnection connection = factory.CreateConnection()) //基于创建链接
{
  using (IModel channel = connection.CreateModel()) //基于链接创建信道
  {
       
  }
}
 

 

七.RabbitMQ常见错误

1.解决:Stats in management UI are disabled on this node

docker exec -it 容器ID bash
cd /etc/rabbitmq/conf.d/
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf

2.解决:None of the specified endpoints were reachable

A.使用guest账号 进入web管理网站
B.然后选择Admin
C.点击需要用到的账号名称
D.找到 Set permission
E.点击Set permission 按钮

 

3.解决:The AMQP operation was interrupted: AMQP close-reason, initia

var factory = new ConnectionFactory();

factory.AutomaticRecoveryEnabled = true;   //设置端口后自动恢复连接属性即可
 

标签:ConnectionFactory,factory,rabbitmq,5672,RabbitMQ,linux,Docker,链接
From: https://www.cnblogs.com/yangpengNetCore/p/16667959.html

相关文章

  • RabbitMQ 生产者与消费者Code
    Nuget引入RabbitMQClient 消费者://Seehttps://aka.ms/new-console-templateformoreinformationusingRabbitMQ.Client;usingSystem.Text;Console.WriteLin......
  • linux ssh 免密登录
    三个节点hadoop102,hadoop103,hadoop104在102节点执行如下命令ssh-keygenssh-copy-id-i/root/.ssh/id_rsa.pubroot@hadoop102ssh-copy-id-i/root/.ssh/id_rsa.p......
  • Linux开机自动挂载非系统硬盘到指定用户
    Linux开机自动挂载非系统硬盘到指定用户背景自己在家捣鼓的LinuxMint21,我的分盘是这样子的:原本1T固态,300多G给了Windows,300多G给了Linux,300多G当做数据盘(免得哪个系......
  • Docker 详细
    Prerequisite很久之前写过Docker的博客,但那时也只是随意了解一下,现在打算重新学习(但我依然没有实际场景需要用到,因此以后可能还会再写一次)参考文章:廖雪峰【一文读懂Doc......
  • Docker
    Docker方式对比物理机部署部署慢、成本高、资源浪费、难扩展、难迁移、硬件兼容差虚拟机部署部署较慢、成本较高、资源较浪费容器化部署部署快,成本低,源利用......
  • Linux定时任务——crontab
    常用crontab-e命令添加用户定时任务,语法格式非常简单,可以在下面的在线工具去测试格式是否正确以及具体的任务执行时间。crontab执行时间计算该命令适用于时间精度要求不......
  • Linux操作系统(十二):计划任务
    什么是计划任务仅执行一次的计划任务循环执行的计划任务可唤醒停机期间的工作任务 一、关于本文内容的导读及什么是计划任务这部分不涉及具体内容的解析,只是作为浏......
  • Docker部署安装 windows
    Docker下载地https://www.docker.com/https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi   ......
  • docker容器 日志迁移
    起因docker安装网心云(挂载在外置硬盘上),这两天莫名其妙把我nas中的硬盘给跑满了,通过搜索后发现,这是docker容器运行时产生的日志文件,默认保存在系统/var/lib/docker目录......
  • Linux 常用命令
    Linux的命令有几百个,对程序员来说,常用的并不多,并不需要全部掌握。如果在学习和工作中遇到了陌生的Linux命令,不要轻易放过,多查资料,掌握它,日积月累,知识面就会宽广。本文介绍......