rabbitMQ的Topic模式的生产者与消费者使用案例

topic模式 RoutingKey 按照英文单词点号多拼接规则填充。其中消费者匹配规则时候 * 代表一个单词,#表示多个单词
消费者C1的RoutingKey 规则按照*.orange.* 匹配 绑定队列Q1
java 复制代码
package com.esint.rabbitmq.work05;

import com.esint.rabbitmq.RabbitMQUtils;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;

public class ReceiveLogsTopic01 {

    public static final String EXCHANGE_NAME = "topic";
    public static void main(String[] args) throws Exception {

        Channel channel = RabbitMQUtils.getChannel();

        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC);

        String queueName = "Q1";

        channel.queueDeclare(queueName,false,false,false,null);

        channel.queueBind(queueName,EXCHANGE_NAME,"*.orange.*");
        System.out.println("Q1队列等待接受消息...");

        DeliverCallback deliverCallback = (deliverTag,mes)->{
            System.out.println("打印ReceiveLogsTopic01控制台消息:" + new String(mes.getBody(),"UTF-8"));
            System.out.println("接收队列:" + queueName + " 绑定键:" + mes.getEnvelope().getRoutingKey());
        };
        channel.basicConsume(queueName,true,deliverCallback,deliverTag->{});
    }

}
消费者C2的RoutingKey 规则按照*.rabbit.* 和 lazy.# 匹配 绑定队列Q2
java 复制代码
package com.esint.rabbitmq.work05;

import com.esint.rabbitmq.RabbitMQUtils;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;

public class ReceiveLogsTopic02 {

    public static final String EXCHANGE_NAME = "topic";
    public static void main(String[] args) throws Exception {

        Channel channel = RabbitMQUtils.getChannel();

        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC);

        String queueName = "Q2";

        channel.queueDeclare(queueName,false,false,false,null);

        channel.queueBind(queueName,EXCHANGE_NAME,"*.*.rabbit");
        channel.queueBind(queueName,EXCHANGE_NAME,"lazy.#");
        System.out.println("Q2队列等待接受消息...");

        DeliverCallback deliverCallback = (deliverTag,mes)->{
            System.out.println("打印ReceiveLogsTopic01控制台消息:" + new String(mes.getBody(),"UTF-8"));
            System.out.println("接收队列:" + queueName + " 绑定键:" + mes.getEnvelope().getRoutingKey());
        };
        channel.basicConsume(queueName,true,deliverCallback,deliverTag->{});
    }

}
生产者顺序发送
log 复制代码
        bindKeyMap.put("quick.orange.rabbit","Q1 Q2 catch【1】");
        bindKeyMap.put("lazy.orange.elep","Q1 Q2 【2】");
        bindKeyMap.put("quick.orange.fox","Q1【3】");
        bindKeyMap.put("lazy.brown.fox","Q2【4】");
        bindKeyMap.put("lazy.pink.rabbit","Q2 Q2【5】");
        bindKeyMap.put("quick.brown.fox","wu【6】");
        bindKeyMap.put("quick.orange.male.rabbit","wu【7】");
        bindKeyMap.put("lazy.orange.male.rabbit","Q2【8】");
java 复制代码
package com.esint.rabbitmq.work05;

import com.esint.rabbitmq.RabbitMQUtils;
import com.rabbitmq.client.Channel;

import java.util.HashMap;
import java.util.Map;

public class ProductLogs {

    public static final String EXCHANGE_NAME = "topic";

    public static void main(String[] args) throws Exception {

        Channel channel = RabbitMQUtils.getChannel();

        HashMap<String,String > bindKeyMap = new HashMap<>();
        bindKeyMap.put("quick.orange.rabbit","Q1 Q2 catch【1】");
        bindKeyMap.put("lazy.orange.elep","Q1 Q2 【2】");
        bindKeyMap.put("quick.orange.fox","Q1【3】");
        bindKeyMap.put("lazy.brown.fox","Q2【4】");
        bindKeyMap.put("lazy.pink.rabbit","Q2 Q2【5】");
        bindKeyMap.put("quick.brown.fox","wu【6】");
        bindKeyMap.put("quick.orange.male.rabbit","wu【7】");
        bindKeyMap.put("lazy.orange.male.rabbit","Q2【8】");

        for (Map.Entry<String, String> bindingKeyEntry : bindKeyMap.entrySet()) {
            String key = bindingKeyEntry.getKey();
            String value = bindingKeyEntry.getValue();
            channel.basicPublish(EXCHANGE_NAME,key,null,value.getBytes("UTF-8"));
            System.out.println("生产者发消息:"+ value);
        }
    }
}
运行消费者1 消费者2,执行生产者:

生产者:

消费者1:

消费者2:

相关推荐
QC·Rex10 小时前
消息队列架构设计 - Kafka/RocketMQ/RabbitMQ 深度对比与实战
kafka·rabbitmq·rocketmq
hINs IONN1 天前
RabbitMQ HAProxy 负载均衡
rabbitmq·负载均衡·ruby
eSsO KERF1 天前
RabbitMQ之交换机
分布式·rabbitmq·ruby
Albert Edison1 天前
【RabbitMQ】Topics 通配符模式(使用案例)
分布式·rabbitmq
Ssan PRIN2 天前
深度掌握 RabbitMQ 消息确认(ACK)机制,确保消息万无一失
分布式·rabbitmq
jessecyj2 天前
【RabbitMQ】超详细Windows系统下RabbitMQ的安装配置
windows·分布式·rabbitmq
MoFe13 天前
【.net core】【RabbitMq】rabbitmq在.net core中的简单使用
分布式·rabbitmq·.netcore
何中应3 天前
在windows本地部署RabbitMQ
分布式·消息队列·rabbitmq
低客的黑调3 天前
RabbitMQ-从入门到生产落地
分布式·rabbitmq
Albert Edison4 天前
【RabbitMQ】发布 / 订阅模式(使用案例)
分布式·rabbitmq