七、rabbitMQ Topics
来源:互联网 发布:模拟弹钢琴的软件 编辑:程序博客网 时间:2024/06/06 02:07
上一节我们学习了direct exchange ,这种exchange叫交换数据的时候是精确匹配routing_key.
这一节我们将学习topics exchange,他可以做到模糊匹配。
* 能够代替一个单词。#代表0个或多个单词。
有两点要注意:
1、不是出现*或#号都可以是代词,他们可能只是普通字符,两个.号之间的*或#(注:开头和结束要特殊一点)才能做代词。
2、这单词和我们普通理解的单词是不一样的,两个.号之间的所有内容称为一个单词(注:开头和结束要特殊一点)。
比如:“*#.orange@*.*” 这里只有最后一个*才是代词,一共有三个单词。
实例:每个动物都有三个属性 速度、颜色、种类,三种属性使用.符合进行分隔.
quick.orange.rabbit
lazy.orange.elephant
quick.brown.fox
lazy.pink.rabbit
quick.brown.dog
lazy.brown.cat
需求:队列1只接收颜色为orange的动物,队列接收兔子和速度为lazy的动物。
消费者1:
package test1;import com.rabbitmq.client.*;import java.io.IOException;public class consumer { private final static String EXCHANGE_NAME = "logs_exchange"; public static void main(String[] args) { ConnectionFactory factory = new ConnectionFactory(); factory.setUsername("guest"); factory.setPassword("guest"); factory.setHost("127.0.0.1"); factory.setVirtualHost("/"); factory.setPort(5672); try { final Connection connection = factory.newConnection(); final Channel channel = connection.createChannel(); channel.exchangeDeclare(EXCHANGE_NAME, "topic");//不存在时,创建exchange String queueName = channel.queueDeclare().getQueue();//创建队列 channel.queueBind(queueName, EXCHANGE_NAME, "*.orange.*");//队列绑定到exchange// channel.queueBind(queueName, EXCHANGE_NAME, "*.*.rabbit");//队列绑定到exchange// channel.queueBind(queueName, EXCHANGE_NAME, "lazy.#");//队列绑定到exchange Consumer consumer = new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String message = new String(body, "UTF-8"); System.out.println(message); } }; boolean autoAck = true; channel.basicConsume(queueName, autoAck, consumer); Thread.sleep(600 * 1000); channel.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } }}
消费者2:
package test1;import com.rabbitmq.client.*;import java.io.IOException;public class consumer { private final static String EXCHANGE_NAME = "logs_exchange"; public static void main(String[] args) { ConnectionFactory factory = new ConnectionFactory(); factory.setUsername("guest"); factory.setPassword("guest"); factory.setHost("127.0.0.1"); factory.setVirtualHost("/"); factory.setPort(5672); try { final Connection connection = factory.newConnection(); final Channel channel = connection.createChannel(); channel.exchangeDeclare(EXCHANGE_NAME, "topic");//不存在时,创建exchange String queueName = channel.queueDeclare().getQueue();//创建队列// channel.queueBind(queueName, EXCHANGE_NAME, "*.orange.*");//队列绑定到exchange channel.queueBind(queueName, EXCHANGE_NAME, "*.*.rabbit");//队列绑定到exchange channel.queueBind(queueName, EXCHANGE_NAME, "lazy.#");//队列绑定到exchange Consumer consumer = new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String message = new String(body, "UTF-8"); System.out.println(message); } }; boolean autoAck = true; channel.basicConsume(queueName, autoAck, consumer); Thread.sleep(600 * 1000); channel.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } }}
生产者:
package test1;import com.rabbitmq.client.*;import java.util.*;public class producter { private final static String EXCHANGE_NAME = "logs_exchange"; public static void main(String[] args) { ConnectionFactory factory = new ConnectionFactory(); factory.setUsername("guest"); factory.setPassword("guest"); factory.setHost("127.0.0.1"); factory.setVirtualHost("/"); factory.setPort(5672); List<String > stringList=new ArrayList<String>(); stringList.add("quick.orange.rabbit"); stringList.add("lazy.orange.elephant"); stringList.add("quick.brown.fox"); stringList.add("lazy.orange.rabbit"); stringList.add("quick.brown.dog"); stringList.add("lazy.brown.cat"); try { Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); channel.exchangeDeclare(EXCHANGE_NAME, "topic");//不存在时,创建exchange for (int i = 0;i < stringList.size(); i++) { channel.basicPublish(EXCHANGE_NAME, stringList.get(i), null,( "我是:"+ stringList.get(i)).getBytes());//消息发布到exchange } channel.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } }}
运行结果:
阅读全文
0 0
- 七、rabbitMQ Topics
- RabbitMQ入门教程(七):主题交换机Topics
- RabbitMQ Topics
- rabbitmq学习5:Topics
- rabbitmq学习5:Topics
- RabbitMQ java Topics主题
- rabbitmq学习5:Topics
- RabbitMq之Routing,Topics
- RabbitMQ之Topics
- RabbitMQ 之五 Topics
- python系列之 RabbitMQ -- TOPICS
- Rabbitmq教程翻译(五)Topics主题
- RabbitMQ学习笔记六:话题(Topics)
- RabbitMQ 学习笔记(五):Topics
- Topics
- RabbitMQ学习(五).NET Client之Topics
- RabbitMQ学习小结(五)—— Topics[Python]
- SpringBoot的RabbitMQ消息队列: 六、第五模式"Topics"
- Java中POJO及其细分XO、DAO的概念
- Spring Boot 系列文章推荐
- Spring Data Redis实战之提供RedisTemplate
- Linux笔记1-简介
- 使用Git上传项目到GitHub
- 七、rabbitMQ Topics
- Linux笔记2-常用命令
- Java 8实战之读书笔记一:内容简介
- JSP中编码小论
- Java 8实战之读书笔记二:基础知识
- 233矩阵(上三角矩阵求累加量//代码和思路不一样
- Java 8实战之读书笔记三:函数式数据处理
- Java 8实战之读书笔记四:高效Java 8编程
- Java 8实战之读书笔记五:超越Java 8