美文网首页CentOS
CentOS 阿里云 RabbitMQ 创建交换机报错

CentOS 阿里云 RabbitMQ 创建交换机报错

作者: Rinaloving | 来源:发表于2023-02-28 13:47 被阅读0次

阿里云 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”
QQ截图20230301104234.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
QQ截图20230301111625.png
  • 在RabbitMQ的Exchange模式中生产者并不会直接把消息发送到Queue中,而是将消息发送到Exchange(交换机),消费者创建各自的队列绑定到交换机.


    QQ截图20230301112344.png
  • 然后声明消息队列并对交换机进行绑定,在这里使用了随机数,目的是声明不重复的消息队列,如果是同一个消息队列,则就变成worker模式,也就是说对于发布订阅模式有多少接收者就有多少个消息队列,而这些消息队列共同从一个交换机中获取数据
    然后同时开两个接收者,结果就如下

明细

QQ截图20230301113340.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.

相关文章

网友评论

    本文标题:CentOS 阿里云 RabbitMQ 创建交换机报错

    本文链接:https://www.haomeiwen.com/subject/wthlldtx.html