CentOS 阿里云 RabbitMQ 创建交换机报错
2023-02-28 本文已影响0人
Rinaloving
阿里云 RabbitMQ 创建交换机报错
1. 报错信息
- RabbitMQ.Client.Exceptions.OperationInterruptedException:“The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=503, text='COMMAND_INVALID - invalid exchange type 'black'', classId=40, methodId=10”
![](https://img.haomeiwen.com/i14245154/4ac028cb21430ec2.png)
解决
1. 阿里云后台解决
-
去阿里云添加授权
QQ截图20230301110001.png
2. 本地解决
- 我是阿里云服务器自己搭建的RabbitMQ ,所以不存在这个问题,授权主体肯定也没有,继续观察代码
//错误写法
string typeName = "black";
// 正确写法
string exchangeName ="rinaExchange1";
string typeName = "fanout";
channel.ExchangeDeclare(exchange: exchangeName, type: typeName);
-
交换机类型名字不能乱写,改一下就成功
QQ截图20230301112936.png
![](https://img.haomeiwen.com/i14245154/8c581a1f889002fe.png)
-
在RabbitMQ的Exchange模式中生产者并不会直接把消息发送到Queue中,而是将消息发送到Exchange(交换机),消费者创建各自的队列绑定到交换机.
QQ截图20230301112344.png
-
然后声明消息队列并对交换机进行绑定,在这里使用了随机数,目的是声明不重复的消息队列,如果是同一个消息队列,则就变成worker模式,也就是说对于发布订阅模式有多少接收者就有多少个消息队列,而这些消息队列共同从一个交换机中获取数据
然后同时开两个接收者,结果就如下
明细
![](https://img.haomeiwen.com/i14245154/491cb1db1079a300.png)
-
交换机发送一条消息,下面两个绑定的队列(消费者)会同时收到
QQ截图20230301182515.png
Exchange 模式
1. 模式种类
名称 | 说明 | 备注 |
---|---|---|
direct | 路由模式 | 路由模式下,在发布消息时指定不同的routeKey,交换机会根据不同的routeKey分发消息到不同的队列中 |
fanout | 发布订阅模式 | 发布消息时把交换机名称告诉RabbitMQ,把交换机设置成fanout发布订阅模式 |
topic | 通配符模式 | 通配符模式和路由模式其实差不多,不同于配符模式中的路由可以声明为模糊查询.符号“#”匹配一个或多个词.符号“”匹配一个词。RabbitMQ中通配符的通配符是用"."来分割字符串的.比如a.只能匹配到a.b,a.c,而a.#可以匹配到a.a.c,a.a.b. |