首页 > 其他分享 >配置RabbitMQ

配置RabbitMQ

时间:2024-05-27 11:56:35浏览次数:22  
标签:false 队列 配置 RabbitMQ rabbit var 服务器 channel

配置:

1.1RabbitMQ集群环境搭建和环境变量:

每台服务器安装RabbitMQ,下载地址:https://www.rabbitmq.com/docs/install-windows#installer

环境变量Path 值 添加:rabbitmq安装目录的sbin目录

1.2安装Erlang和配置环境变量

每台服务器安装Erlang,下载地址:https://www.erlang.org/downloads

环境变量Path值添加:Erlang安装目录的bin目录

1.3安装Rabbitmq服务

运行cmd窗体输入 rabbitmq-plugins enable rabbitmq_management 命令进行安装

1.4集群配置

绑定ip计算机名称 (C:\Windows\System32\drivers\etc)

ip1 计算机名1

ip2 计算机名2

ip3 计算机名3

拷贝其中一台服务器上的 C:\Windows和C:\Users\Administrator\.erlang.cookie 文件复制到另外几台服务器上

分别在几个服务器上运行 rabbitmq-server -detached,启动 rabbit 节点服务。

在 rabbit@rabbit1 节点服务器上运行 rabbitmqctl stop_app,停止 rabbit 节点程序。

在 rabbit@rabbit1 节点服务器上运行 rabbitmqctl join_cluster rabbit@rabbit2,将节点 rabbit@rabbit1 和 rabbit@rabbit2 组成集群。

在 rabbit@rabbit1 节点服务器上运行 rabbitmqctl join_cluster rabbit@rabbit3,将节点 rabbit@rabbit1 和 rabbit@rabbit3 组成集群。

分别在服务器上运行 rabbitmqctl start_app,启动 rabbit 节点程序。

运行 rabbitmqctl  cluster_status 查看集群的运行状态。

访问http://localhost:15672/ 默认帐号:guest 密码:guest 

使用镜像队列

 

策略名随便填

正则表达式:^

Apply to:Queues

Definition:ha-mode:exactly、ha-params:2、ha-sync-mode:automatic

2.添加RabbitMQ包

3.配置类:

public class RabbitMq
{
  private readonly IHubContext<XXHub> _hubContext;
  private const string ExchangeName = "SignalRExchange";
  private const string QueueAName = "ServerAQueue";
  private const string QueueBName = "ServerBQueue";
  private const string QueueCName = "ServerCQueue";
  private const string RoutingKey = "ServerQueueKey";

  public RabbitMq(IHubContext<XXHub> hubContext)
  {
    _hubContext = hubContext;
  }

  public static void SetupExchangeAndQueues()
  {
    var factory = new ConnectionFactory() { HostName = "localhost", UserName = "guest", Password = "guest" };
    using (var connection = factory.CreateConnection())
    using (var channel = connection.CreateModel())
    {
      //channel.ExchangeDeclare(ExchangeName, ExchangeType.Direct);//创建Direct类型的交换机

      //channel.QueueDeclare(QueueAName, false, false, false, null);//创建队列A
      //channel.QueueBind(QueueAName, ExchangeName, RoutingKey);//将队列A绑定到交换机

      //channel.QueueDeclare(QueueBName, false, false, false, null);//创建队列B
      //channel.QueueBind(QueueBName, ExchangeName, RoutingKey);//将队列B绑定到交换机

      //channel.QueueDeclare(QueueCName, false, false, false, null);//创建队列C
      //channel.QueueBind(QueueCName, ExchangeName, RoutingKey);//将队列C绑定到交换机
    }
  }

  public void SendMessageToExchange(string message)
  {
    var factory = new ConnectionFactory() { HostName = "localhost", UserName = "guest", Password = "guest" };
    using (var connection = factory.CreateConnection())
    using (var channel = connection.CreateModel())
    {
      var body = Encoding.UTF8.GetBytes(message);

      channel.BasicPublish(exchange: ExchangeName, routingKey: RoutingKey, basicProperties: null, body: body);//发送消息到队列
    }
  }

  public async Task ConsumeMessageFromQueue()
  {
    var factory = new ConnectionFactory() { HostName = "localhost", UserName = "guest", Password = "guest" };
    using (var connection = factory.CreateConnection())
    using (var channel = connection.CreateModel())
    {
      var consumer = new EventingBasicConsumer(channel);
      consumer.Received += async (model, ea) =>
      {
        var body = ea.Body.ToArray();
        var message = Encoding.UTF8.GetString(body);

        try
        {
          ReciveData reciveData = JsonConvert.DeserializeObject<ReciveData>(message);
          if (reciveData != null)
          {
            foreach (var item in reciveData.ConnectionIds)
            {
              await _hubContext.Clients.Client(item).SendAsync("ReceiveData", JsonConvert.SerializeObject(reciveData));//将队列数据返回
            }
          }
        }
        catch (Exception ex)
        {
          //await _hubContext.Clients.All.SendAsync("Msg", "错误:" + ex.ToString());
        }

        //channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
      };

      await Task.Delay(0);
      channel.BasicConsume(queue: QueueBName, autoAck: true, consumer: consumer);//消费服务器A队列的消息
      channel.BasicConsume(queue: QueueBName, autoAck: true, consumer: consumer);//消费服务器B队列的消息
      channel.BasicConsume(queue: QueueCName, autoAck: true, consumer: consumer);//消费服务器C队列的消息
    }
  }
}

 

标签:false,队列,配置,RabbitMQ,rabbit,var,服务器,channel
From: https://www.cnblogs.com/lurenshun/p/18214997

相关文章

  • RabbitMQ(python)
     一、认识MQMQ全称为MessageQueue消息队列(MQ)是一种应用程序对应用程序的通信方法。MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。这样发布者和使用者都不用知道对方的存在。生产者消费者模式是通过一个容器来解决生......
  • 通过vconfig命令配置VLAN
    #yuminstallvconfig 安装vconfig命令包#modprobe8021q加载8021q模块,若不支持8021q模块,则不支持VLAN#lsmod|grep-i8021q #vconfigaddeth0100 在eth0上配置VLAN100#vconfigaddeth0200 在eth0上配置VLAN200#vconfigset_flageth0.10011设置VLAN的REO......
  • Spring学习:如何创建并配置一个第三方Bean
    文章目录一、知识储备二、创建第三方Bean 一、知识储备使用XML配置application.xml<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSche......
  • Windows下安装配置深度学习环境
    Windows下安装配置深度学习环境1.准备工作1.1环境准备操作系统:win1022H2GPU:NvidiaGeForceRTX306012G1.2安装Nvidia驱动、cuda、cuDNN下载驱动需要注册并登录英伟达账号。我这里将下面用到的安装包放到了百度网盘,可以关注微信公众号思......
  • 在Linux中,如何配置负载均衡器?
    在Linux中配置负载均衡器通常涉及使用如Nginx、HAProxy等软件,或者使用LinuxVirtualServer(LVS)这样的内核模块。以下是使用Nginx和HAProxy作为负载均衡器的基本步骤:1.使用Nginx作为负载均衡器安装Nginx:对于基于Debian的系统:sudoaptupdatesudoaptinstallnginx对......
  • 在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
    在Linux中配置数据库服务器,如MySQL或PostgreSQL,通常包括安装数据库软件、配置数据库设置、安全加固以及优化性能。以下是为这两种流行的数据库系统提供的配置指南:1.MySQL数据库服务器安装MySQL:对于基于Debian的系统(如Ubuntu):sudoaptupdatesudoaptinstallmysql-serve......
  • 在Linux中,如何配置Web服务器(如Apache或Nginx)?
    在Linux系统中配置Web服务器是建立网站托管环境的关键步骤之一。下面将详细介绍如何在Linux中配置两种流行的Web服务器:Apache和Nginx:一、ApacheWeb服务器的配置:安装Apache服务器:首先确认Apache是否已安装在系统上。这可以通过运行rpm-qa|grep-ihttpd(针对RedHat系列)或......
  • Gateway配置教程
    SpringCloudGateway是SpringCloud的一个全新项目,它基于Spring5.0、SpringBoot2.x和ProjectReactor等技术开发的网关,旨在提供一种简单、有效、统一的API路由管理方式。以下是SpringCloudGateway的基本配置步骤:1.添加依赖在你的SpringBoot项目的po......
  • IDEA resource下的文件夹内的配置文件不生效,但resource下的配置生效
    问题:我的resource如图所示,运行时发现只有resource下的application.yml被识别到了,但bak里的三个配置没有生效 解决: 在projectstructure中打开molude,打开resource,选中其下不起作用的文件夹,如图中的bak,将其选为resource资源文件,即点击下图位置 之后再重新运行,可以发现bak......
  • Kubernetes中Pod容器的资源限制和探针配置
    前言在Kubernetes中,定义Pod时可以选择性地为每个容器设定所需要的资源数量。最常见的可设定资源是CPU和内存大小,以及其他类型的资源;另一方面,通过配置探针,可以确保容器在运行时保持健康,并且只有在准备好接收流量时才会被负载均衡器引导流量。从而提高应用程序的可靠性和......