一、Topic模式介绍
- #:代表一个单词
- *:代表多个单词
二、示例
基础代码及工具类全都在第一篇中,需要请查看《RabbitMQ工作模式(一)》
1、生产者代码
packagecom.cui.producer; importcom.cui.common.RabbitMqUtils; importcom.rabbitmq.client.BuiltinExchangeType; importcom.rabbitmq.client.Channel; importcom.rabbitmq.client.Connection; importjava.io.IOException; /*** 交换机类型需要改为Topic,RoutingKey指定规则*/publicclassProducer_Topics { publicstaticvoidmain(String[] args) throwsIOException { //获得连接Connectionconnection=RabbitMqUtils.getConnection(); //创建channelChannelchannel=connection.createChannel(); //创建交换机Stringexchange="test_topic_exchange"; channel.exchangeDeclare(exchange, BuiltinExchangeType.TOPIC, true, false, false, null); //创建队列StringqueueName1="test_topic_queue1"; StringqueueName2="test_topic_queue2"; channel.queueDeclare(queueName1, true, false, false, null); channel.queueDeclare(queueName2, true, false, false, null); //绑定交换机和队列channel.queueBind(queueName1, exchange, "#.error"); channel.queueBind(queueName1, exchange, "user.*"); channel.queueBind(queueName2, exchange, "*.*"); //发送消息Stringmessage="信息:这是一条topic模式下的消息"; channel.basicPublish(exchange, "user.info", null, message.getBytes()); //释放资源RabbitMqUtils.close(channel, connection); } }
2、消费者代码
通配符模式消费者的代码和PubSub的消费者代码差不多,只是需要将交换机的类型改为Topic即可测试。上述生产者的消息queueName1、queueName2都会获取到消息。如果发送消息时候的RoutingKey改为"asd.info",那么只有queueName2符合规则。
Topic模式可以实现发布订阅模式和路由模式的功能,只是Topic在配置RoutingKey的时候可以使用通配符。