RabbitMQ笔记

 1.首先要安装erlang环境。配置环境变量。此电脑,右击,属性。添加一个ERLANG_HOME,然后在Path中添加一个%ERLANG_HOME%\bin

 

 

 

 

 

 

RabbitMq下载完成后,CMD命令行指到对应的文件夹。

分别执行

rabbitmq-service install

rabbitmq-service enable

rabbitmq-service start

 在服务中可以看到RabbitMQ服务已经启动

 

然后查看rabbitmq的状态,rabbitmqctl status. 发现是权限的问题,需要复制cookie

 

把用户文件夹下的.erlang.cookie文件复制到两个地方,

1.一个是rabbitmq的sbin文件下面,

2.一个是system32/config/systemprofile

 

 

 然后重启RabbitMQ服务,cmd输入命令rabbitmqctl status.就可以了

安装插件:

rabbitmq-plugins.bat  list可以看到可以安装的插件

默认端口是15276

添加账号,默认的账号是guest,密码也是guest。 

通过命令行查看用户账号列表; rabbitmqctl list_users

使用命令行添加用户,权限和分组

rabbitmqctl add_user weilian 123456   //添加账号和密码

rabbitmqctl set_permissions weilian ".*" ".*"  ".*"  // 赋予weilian所有读写的权限

rabbitmqctl set_user_tags weilian administrator  //分配用户组。

也可以在页面上添加

 推送的时候,队列可以不用绑定交换机Exchange。如下,可以直接推送到helloword的消息队列

channel.QueueDeclare(queue: "helloWord", durable: true, exclusive: false, autoDelete: false, arguments: null);

channel.BasicPublish(exchange: "",  
                    routingKey: "helloWord",
                    basicProperties: null,
                    body: body);

队列绑定到Exchange的时候

1.声明队列

2.声明交换机Exchange

3.队列和交换机(Exchange)绑定

4.推送消息

ConnectionFactory factory = new ConnectionFactory();
factory.HostName = "localhost";  // RabbitMQ本地运行
factory.UserName = "guest";  // 登录名,
factory.Password = "guest";  // 密码
using (IConnection connection = factory.CreateConnection())
{
    using (IModel channel = connection.CreateModel())  //创建信道
    {
        // 1.声明一个队列
        channel.QueueDeclare(queue: "OnlyProductor", durable: true, exclusive: false, autoDelete: false, arguments: null);

        // 2.声明一个交换机
        channel.ExchangeDeclare(exchange: "OnlyProductorExchange", type: ExchangeType.Direct, durable: true, autoDelete: false, arguments: null);

        // 3.队列Queue和交换机绑定

        channel.QueueBind(queue: "OnlyProductor", exchange: "OnlyProductorExchange", routingKey: string.Empty, arguments: null);

        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("生产者已经准备就绪");
        int i = 0;
        while (i < 10000)
        {
            string message = $"Run消息{i}";
            byte[] body = Encoding.UTF8.GetBytes(message);
            channel.BasicPublish(exchange: "OnlyProductorExchange",  // 如果exchange是空,系统采用默认的exchange,推送到队列名称是routingKey这个字段赋值的名称的队列。
                                 routingKey: string.Empty,
                                 basicProperties: null,
                                 body: body);
            Console.WriteLine($"Run消息:{message}已经发送");
            i++;
            Thread.Sleep(500);
        }
    }
}

  

 

1.exchange的四种类型

 direct;固定匹配key值

fanout: 广播,所有的队列都可以接收到消息

topic:模糊匹配key值。 #可以匹配多个单词,*只能匹配一个单词

header:在http请求头中添加参数进行匹配。和Direct有点像,不过不是根据routingKey,是根据header里面的键值对,性能比较差,完全匹配或者匹配任意一个(根据x-match是any或者all来判断)

channel.exchange_declare(exchange='my-headers-exchange', exchange_type='headers')
channel.basic_publish(
    exchange='my-headers-exchange',
    routing_key='',
    body='Hello World!',
    properties=pika.BasicProperties(headers={'h1': 'Header1'}))

接受消息
channel.queue_bind(
    queue='HealthQ',
    exchange='my-headers-exchange',
    routing_key='',
    arguments={'x-match': 'any', 'h1': 'Header1', 'h2': 'Header2'})

 

2.发送消息确认

分为Tx和Confirm模式

 

 

 

 

3.消费消息确认

autoAck改为false,否则自动确认,失败消费也确认。

 

 

下面代码改为try catch,成功的话BasicAck,失败的话BasicReject

 

4.持久化

设置exchange持久化,队列持久化,消息持久化

 

posted @ 2021-09-29 23:20  留下成长的足迹  阅读(32)  评论(0)    收藏  举报