RabbitMQ的工作模式

1.work-queue:各个消费者依次取消息,均匀公平,多个消费者之间是竞争关系
生产者产生10条记录


      for (int i = 0; i < 10; i++) {

            String body=i+":work_queue";

            channel.basicPublish("","work_queue",null,body.getBytes());
        }



消费者1消费1,3,5,7,9条

SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
body:1:work_queue
body:3:work_queue
body:5:work_queue
body:7:work_queue
body:9:work_queue
SLF4J: Defaulting to no-operation (NOP) logger implementation

消费者2消费0,2,4,6,8条

SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
body:0:work_queue
body:2:work_queue
body:4:work_queue
body:6:work_queue
body:8:work_queue
  1. Pub/Sub订阅模式
    加入交换机,服务提供者将消息发给交换机,Topic交换机将消息路由给消费者
    交换机Exchange的三种类型:Fanout广播,Diret定向,通配符:把消息交给符合路由模式的队列

2.1 Fanout广播

 //创建交换机,修改交换机类型为Fanout
        String exchangeName="test_fanout";

        channel.exchangeDeclare(exchangeName, BuiltinExchangeType.FANOUT,true,false,false,null);
        //创建queue
        String queue1Name="test_fanout_queue1";
        String queue2Name="test_fanout_queue2";
        channel.queueDeclare(queue1Name,true,false,false,null);
        channel.queueDeclare(queue2Name,true,false,false,null);
        //绑定交换机和队列
        // queueBind(String queue, String exchange, String routingKey),如果交换机的类型为fanout,routingKey设为""
        channel.queueBind(queue1Name,exchangeName,"");
        channel.queueBind(queue2Name,exchangeName,"");

所有绑定队列均可收到消息

2.2 Diret定向,加入routingKey

  //创建交换机,交换机类型Direct
        String exchangeName="test_route";

        channel.exchangeDeclare(exchangeName, BuiltinExchangeType.DIRECT,true,false,false,null);

//绑定交换机和队列
        // queueBind(String queue, String exchange, String routingKey),如果交换机的类型为fanout,routingKey设为""
        channel.queueBind(queue1Name,exchangeName,"error");
        channel.queueBind(queue2Name,exchangeName,"error");
        channel.queueBind(queue2Name,exchangeName,"info");

发送消息时也要加routingKey

        //发送消息
        String body="日志:xu调用了》》》,日志级别:info";
        channel.basicPublish(exchangeName,"info",null,body.getBytes());

这里消费者1取queue1,消费者2取queueu2
routingKey为info时
消费者1:收到消息

D:\devtools\java\java11\bin\java.exe "-javaagent:D:\devtools\JetBrains\IntelliJ IDEA 2021.3.3\lib\idea_rt.jar=50967:D:\devtools\JetBrains\IntelliJ IDEA 2021.3.3\bin" -Dfile.encoding=GBK -classpath D:\projects\rabbitmq\rabbitmq-consumer\target\classes;C:\Users\16925\.m2\repository\com\rabbitmq\amqp-client\5.6.0\amqp-client-5.6.0.jar;C:\Users\16925\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar com.jianhua.rabbitmq.Consumer_Route2
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
body:日志:xu调用了》》》,日志级别:info
将日志信息打印到控制台

消费者2:没有收到消息

D:\devtools\java\java11\bin\java.exe "-javaagent:D:\devtools\JetBrains\IntelliJ IDEA 2021.3.3\lib\idea_rt.jar=51118:D:\devtools\JetBrains\IntelliJ IDEA 2021.3.3\bin" -Dfile.encoding=GBK -classpath D:\projects\rabbitmq\rabbitmq-producer\target\classes;C:\Users\16925\.m2\repository\com\rabbitmq\amqp-client\5.6.0\amqp-client-5.6.0.jar;C:\Users\16925\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar com.jianhua.rabbitmq.Producer_Route
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.


将发送的消息routingKey修改为error再次执行

//发送消息
        String body="日志:xu调用了》》》,日志级别:error";
        channel.basicPublish(exchangeName,"error",null,body.getBytes());

消费者1:收到消息

D:\devtools\java\java11\bin\java.exe "-javaagent:D:\devtools\JetBrains\IntelliJ IDEA 2021.3.3\lib\idea_rt.jar=50926:D:\devtools\JetBrains\IntelliJ IDEA 2021.3.3\bin" -Dfile.encoding=GBK -classpath D:\projects\rabbitmq\rabbitmq-consumer\target\classes;C:\Users\16925\.m2\repository\com\rabbitmq\amqp-client\5.6.0\amqp-client-5.6.0.jar;C:\Users\16925\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar com.jianhua.rabbitmq.Consumer_Route1
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
body:日志:xu调用了》》》,日志级别:error
将日志信息存到数据库

消费者2:收到消息

D:\devtools\java\java11\bin\java.exe "-javaagent:D:\devtools\JetBrains\IntelliJ IDEA 2021.3.3\lib\idea_rt.jar=50967:D:\devtools\JetBrains\IntelliJ IDEA 2021.3.3\bin" -Dfile.encoding=GBK -classpath D:\projects\rabbitmq\rabbitmq-consumer\target\classes;C:\Users\16925\.m2\repository\com\rabbitmq\amqp-client\5.6.0\amqp-client-5.6.0.jar;C:\Users\16925\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar com.jianhua.rabbitmq.Consumer_Route2
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
body:日志:xu调用了》》》,日志级别:info
将日志信息打印到控制台
body:日志:xu调用了》》》,日志级别:error
将日志信息打印到控制台

2.3 Topic主题模式,类似于模糊匹配 表示一个单词,#号表示0个或多个单词 例如.test,test.#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值