http://blog.csdn.net/zhu_tianwei/article/details/40887755

参考:http://blog.csdn.NET/lmj623565791/article/details/37669573

使用direct类型实现:消息会被推送至绑定键(binding key)和消息发布附带的选择键(routing key)完全匹配的队列。例如:将不同的日志发送到不同的消费端。

1.发送日志端SendLogDirect.Java

[java] view plaincopy print?
  1. package cn.slimsmart.rabbitmq.demo.route;
  2. import java.util.Random;
  3. import java.util.UUID;
  4. import com.rabbitmq.client.AMQP;
  5. import com.rabbitmq.client.Channel;
  6. import com.rabbitmq.client.Connection;
  7. import com.rabbitmq.client.ConnectionFactory;
  8. //随机发送6条随机类型(routing key)的日志给转发器~~
  9. public class SendLogDirect {
  10. //交换名称
  11. private static final String EXCHANGE_NAME = "ex_logs_direct";
  12. //日志分类
  13. private static final String[] SEVERITIES = { "info", "warning", "error" };
  14. public static void main(String[] args) throws Exception {
  15. //创建连接和频道
  16. ConnectionFactory factory = new ConnectionFactory();
  17. factory.setHost("192.168.101.174");
  18. // 指定用户 密码
  19. factory.setUsername("admin");
  20. factory.setPassword("admin");
  21. // 指定端口
  22. factory.setPort(AMQP.PROTOCOL.PORT);
  23. Connection connection = factory.newConnection();
  24. Channel channel = connection.createChannel();
  25. // 声明转发器的类型
  26. channel.exchangeDeclare(EXCHANGE_NAME, "direct");
  27. //发送6条消息
  28. for (int i = 0; i < 6; i++)
  29. {
  30. String severity = getSeverity();
  31. String message = severity + "_log :" + UUID.randomUUID().toString();
  32. // 发布消息至转发器,指定routingkey
  33. channel.basicPublish(EXCHANGE_NAME, severity, null, message  .getBytes());
  34. System.out.println(" [x] Sent '" + message + "'");
  35. }
  36. channel.close();
  37. connection.close();
  38. }
  39. /**
  40. * 随机产生一种日志类型
  41. *
  42. * @return
  43. */
  44. private static String getSeverity()
  45. {
  46. Random random = new Random();
  47. int ranVal = random.nextInt(3);
  48. return SEVERITIES[ranVal];
  49. }
  50. }

2.接收日志端ReceiveLogsDirect.java

[java] view plaincopy print?
  1. package cn.slimsmart.rabbitmq.demo.route;
  2. import java.util.Random;
  3. import com.rabbitmq.client.AMQP;
  4. import com.rabbitmq.client.Channel;
  5. import com.rabbitmq.client.Connection;
  6. import com.rabbitmq.client.ConnectionFactory;
  7. import com.rabbitmq.client.QueueingConsumer;
  8. //接收端随机设置一个日志严重级别(binding_key)。。。
  9. public class ReceiveLogsDirect {
  10. private static final String EXCHANGE_NAME = "ex_logs_direct";
  11. private static final String[] SEVERITIES = { "info", "warning", "error" };
  12. public static void main(String[] args) throws Exception {
  13. // 创建连接和频道
  14. ConnectionFactory factory = new ConnectionFactory();
  15. factory.setHost("192.168.101.174");
  16. // 指定用户 密码
  17. factory.setUsername("admin");
  18. factory.setPassword("admin");
  19. // 指定端口
  20. factory.setPort(AMQP.PROTOCOL.PORT);
  21. Connection connection = factory.newConnection();
  22. Channel channel = connection.createChannel();
  23. // 声明direct类型转发器
  24. channel.exchangeDeclare(EXCHANGE_NAME, "direct");
  25. String queueName = channel.queueDeclare().getQueue();
  26. String severity = getSeverity();
  27. // 指定binding_key
  28. channel.queueBind(queueName, EXCHANGE_NAME, severity);
  29. System.out.println(" [*] Waiting for "+severity+" logs. To exit press CTRL+C");
  30. QueueingConsumer consumer = new QueueingConsumer(channel);
  31. channel.basicConsume(queueName, true, consumer);
  32. while (true)
  33. {
  34. QueueingConsumer.Delivery delivery = consumer.nextDelivery();
  35. String message = new String(delivery.getBody());
  36. System.out.println(" [x] Received '" + message + "'");
  37. }
  38. }
  39. /**
  40. * 随机产生一种日志类型
  41. *
  42. * @return
  43. */
  44. private static String getSeverity()
  45. {
  46. Random random = new Random();
  47. int ranVal = random.nextInt(3);
  48. return SEVERITIES[ranVal];
  49. }
  50. }

启动几个接收端服务,再启动发送端,接收端对应绑定的键收到对应的消息。

注:发送消息时可以设置routing_key,接收队列与转发器间可以设置binding_key,接收者接收与binding_key与routing_key相同的消息。

转载于:https://www.cnblogs.com/telwanggs/p/7124609.html

(转)RabbitMQ学习之路由(java)相关推荐

  1. (转)RabbitMQ学习之Headers交换类型(java)

    http://blog.csdn.net/zhu_tianwei/article/details/40923131 Headers类型的exchange使用的比较少,它也是忽略routingKey的一 ...

  2. (转) RabbitMQ学习之发布/订阅(java)

    http://blog.csdn.net/zhu_tianwei/article/details/40887733 参考:http://blog.csdn.NET/lmj623565791/artic ...

  3. (转) RabbitMQ学习之远程过程调用(RPC)(java)

    http://blog.csdn.net/zhu_tianwei/article/details/40887885 在一般使用RabbitMQ做RPC很容易.客户端发送一个请求消息然后服务器回复一个响 ...

  4. (转)RabbitMQ学习之主题topic(java)

    http://blog.csdn.net/zhu_tianwei/article/details/40887775 参考:http://blog.csdn.NET/lmj623565791/artic ...

  5. RabbitMQ学习

    RabbitMQ学习 1.概述 用于进程通信的中间件. 优势: 劣势: 1.应用解耦:提高了系统容错性和可维护性 1.系统依赖越多不能保证MQ的高可用 2.异步提速:提升用户体验和系统吞吐量 2.复杂 ...

  6. RabbitMQ 学习笔记

    RabbitMQ 学习笔记 RabbitMQ 学习笔记 1. 中间件 1.1 什么是中间件 1.2 为什么要使用消息中间件 1.3 中间件特点 1.4 在项目中什么时候使用中间件技术 2. 中间件技术 ...

  7. Rabbitmq学习笔记(尚硅谷2021)

    Rabbitmq学习笔记 (尚硅谷) 1.MQ 的概念 1.1 什么是 MQ? 1.2 为什么要用 MQ? 削峰 解耦 异步 1.3 MQ 的分类 ActiveMQ Kafka RocketMQ Ra ...

  8. 乐行学院RabbitMQ学习教程 第一章 RabbitMQ介绍(可供技术选型时使用)

    乐行学院RabbitMQ学习教程 第一章 RabbitMQ介绍 RabbitMQ介绍 1.RabbitMQ技术简介 2.RabbitMQ其他扩展插件 2.1监控工具rabbitmq-managemen ...

  9. 分布式消息中间件之RabbitMQ学习笔记[一]

    写在前面 嗯,陆续的整理一些中间件的笔记 今天和小伙伴们分享RabbitMQ 相关笔记 博文偏理论,内容涉及: RabbitMQ的简单介绍 AMQP协议标准介绍 RabbitMQ Demo 食用方式: ...

最新文章

  1. 跟阿里云技术专家阙寒一起深度了解视频直播CDN技术
  2. IT管理人员需要更加了解数据中心冷却情况
  3. 《数据驱动安全:数据安全分析、可视化和仪表盘》一2.3 数据帧介绍
  4. JS定时器使用,定时定点,固定时刻,循环执行
  5. javaSE学习 访问控制
  6. 第八章- 测试并发应用(引言)
  7. 风变编程python网址_风变编程:职场学习Python的重要性
  8. Git:操作报错:fatal: ‘origin‘ does not appear to be a git repository解决方案
  9. nginx 文件服务器_nginx配置简单文件服务器
  10. seo优化之如何选择产品
  11. 网站被攻击如何正确防护
  12. android传感器原理,浅谈Android传感器 III-磁传感器
  13. Spring Boot整合Admin
  14. 基于JAVA自行车在线租赁管理系统2021计算机毕业设计源码+系统+lw文档+部署
  15. MIKE 21 教程 2.5 水动力模块教学:涡粘系数(Eddy viscosity),河床阻力与曼宁系数(Bed Resistance)
  16. 浏览器功能大比拼:谁更出彩?
  17. 服务器put请求获取不到参数
  18. win10开机一直转圈圈进不去系统怎么办
  19. sql注入中的--+注释问题探索
  20. 初学编程者必知的五个网站

热门文章

  1. (96)自动售货机状态转移图,面试必问(二十)(第20天)
  2. 24小时学会python_零基础python24小时极速入门学习
  3. cs文件,外部类操作窗体控件
  4. ajax获取后生成元素,获取动态的子元素生成的内容与jQuery AJAX
  5. 用电脑更新手机ios系统_macOS 11正式版:大更新!苹果把iOS风格搬到了电脑上
  6. php gettext 为空,PHP Gettext
  7. python :使用 __getitem__ 和 __iter__ 可以使类成为一个迭代器
  8. dan.php,shenlingdan.php
  9. java getpathinfo_request.getServletPath()和request.getPathInfo()用法
  10. Matlab学习记录 1