生产者

  1. import com.rabbitmq.client.Channel;
  2. import com.rabbitmq.client.Connection;
  3. import utils.ConnectionUtil;
  4.  
  5. public class Send {
  6.  
  7. private static String EXCHANGE_NAME = "test_exchange_direct";
  8.  
  9. public static void main(String[] args) throws Exception{
  10.  
  11. Connection connection = ConnectionUtil.getConnection();
  12. Channel channel = connection.createChannel();
  13. channel.exchangeDeclare(EXCHANGE_NAME,"direct");
  14.  
  15. String msg = "hellow direct";
  16. String routingKey = "error";
  17. channel.basicPublish(EXCHANGE_NAME, routingKey, null, msg.getBytes());
  18.  
  19. System.out.println("send=====>" + msg);
  20. channel.close();
  21. connection.close();
  22. }
  23.  
  24. }

消费者1

  1. import com.rabbitmq.client.*;
  2. import utils.ConnectionUtil;
  3.  
  4. import java.io.IOException;
  5.  
  6. public class Recv1 {
  7.  
  8. private static String EXCHANGE_NAME = "test_exchange_direct";
  9. private static String QUEUE_NAME = "test_queue_direct_1";
  10.  
  11. public static void main(String[] args) throws Exception {
  12. //获取连接
  13. Connection connection = ConnectionUtil.getConnection();
  14. //从连接中获取一个通道
  15. final Channel channel = connection.createChannel();
  16. channel.basicQos(1);
  17.  
  18. channel.queueDeclare(QUEUE_NAME,false,false,false,null);
  19. channel.queueBind(QUEUE_NAME, EXCHANGE_NAME,"error");
  20.  
  21. Consumer consumer = new DefaultConsumer(channel) {
  22. //当消息到达时执行回调方法
  23. @Override
  24. public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
  25. byte[] body) throws IOException {
  26. String message = new String(body, "utf-8");
  27. System.out.println("[Receive1]:" + message);
  28.  
  29. try {
  30. Thread.sleep(2000);
  31. } catch (Exception e) {
  32. e.printStackTrace();
  33. } finally {
  34. System.out.println("[1] done");
  35. channel.basicAck(envelope.getDeliveryTag(),false);
  36. }
  37. }
  38. };
  39. boolean autoAck = false;
  40. channel.basicConsume(QUEUE_NAME,autoAck,consumer);
  41. }
  42.  
  43. }

消费者2

  1. import com.rabbitmq.client.*;
  2. import utils.ConnectionUtil;
  3.  
  4. import java.io.IOException;
  5.  
  6. public class Recv2 {
  7.  
  8. private static String EXCHANGE_NAME = "test_exchange_direct";
  9. private static String QUEUE_NAME = "test_queue_direct_2";
  10.  
  11. public static void main(String[] args) throws Exception {
  12. //获取连接
  13. Connection connection = ConnectionUtil.getConnection();
  14. //从连接中获取一个通道
  15. final Channel channel = connection.createChannel();
  16. channel.basicQos(1);
  17.  
  18. channel.queueDeclare(QUEUE_NAME,false,false,false,null);
  19. channel.queueBind(QUEUE_NAME, EXCHANGE_NAME,"error");
  20. channel.queueBind(QUEUE_NAME, EXCHANGE_NAME,"info");
  21. channel.queueBind(QUEUE_NAME, EXCHANGE_NAME,"warning");
  22.  
  23. Consumer consumer = new DefaultConsumer(channel) {
  24. //当消息到达时执行回调方法
  25. @Override
  26. public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
  27. byte[] body) throws IOException {
  28. String message = new String(body, "utf-8");
  29. System.out.println("[Receive2]:" + message);
  30.  
  31. try {
  32. Thread.sleep(2000);
  33. } catch (Exception e) {
  34. e.printStackTrace();
  35. } finally {
  36. System.out.println("[2] done");
  37. channel.basicAck(envelope.getDeliveryTag(),false);
  38. }
  39.  
  40. }
  41. };
  42. boolean autoAck = false;
  43. channel.basicConsume(QUEUE_NAME,autoAck,consumer);
  44. }
  45.  
  46. }

RabbitMQ路由模式的更多相关文章

  1. rabbitMQ的三种路由模式

    rabbitMQ工作流程: 1.声明交换机 2.声明消息队列 3.绑定交换机和队列 4.生产者往交换机里发送新消息 5.交换机根据所选的模式和routingKey决定消息发往哪条消息队列 6.一个消费 ...

  2. RabbitMQ (六) 订阅者模式之路由模式 ( direct )

    路由模式下,生产者发送消息时需要指定一个路由键(routingKey),交换机只会把消息转发给包含该路由键的队列 这里,我们改变一下声明交换机的方式. 我们通过管理后台添加一个交换机. 添加后,生产者 ...

  3. RabbitMQ六种队列模式-路由模式

    前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式 [本文]RabbitMQ六种队列模式-主 ...

  4. RabbitMQ学习第四记:路由模式(direct)

    1.什么是路由模式(direct) 路由模式是在使用交换机的同时,生产者指定路由发送数据,消费者绑定路由接受数据.与发布/订阅模式不同的是,发布/订阅模式只要是绑定了交换机的队列都会收到生产者向交换机 ...

  5. RabbitMQ 一二事(4) - 路由模式介绍

    路由模式其实和订阅模式差不多,只不过交换机的类型不同而已 路由模式可以用下图来表示,比订阅模式多了一个key,举个栗子就是根据不同的人群来订阅公众号,来收取消息 根据不同的key来获取不同的消息 最简 ...

  6. python使用rabbitMQ介绍四(路由模式)

    一.模式介绍 路由模式,与发布-订阅模式一样,消息发送到exchange中,消费者把队列绑定到exchange上. 这种模式在exchange上添加添加了一个路由键(routing-key),生产者发 ...

  7. RabbitMQ路由类型

    关于RabbitMQ的Exchange类型 参考地址:<RabbitMQ学习系列(四): 几种Exchange 模式> github地址:https://github.com/ChenWe ...

  8. 1.RabbitMq - Work 模式

    RabbitMq - Work 模式 一.什么是Work模式 如果有几个消息都需要处理,且每个消息的处理时间很长,仅有一个消费者,那么当它在处理一个消息的时候,其他消息就只有等待. 等待有时候是好的, ...

  9. RabbitMQ工作模式

    ------------恢复内容开始------------ RabbitMQ基本概念: Producer:生产者(消息的提供者) Consumer:消费者(消息的使用者) Message:消息(程序 ...

随机推荐

  1. cf round546 cde

    第一题会卡一下同时用set和cin.. 其他的注意下矩阵对角线下标的应用即可 #include<bits/stdc++.h> using namespace std; #define ma ...

  2. codeforce 240E 最小树形图+路径记录更新

    最小树形图的路径是在不断建立新图的过程中更新的,因此需要开一个结构体cancle记录那些被更新的边,保存可能会被取消的边和边在旧图中的id 在朱刘算法最后添加了一个从后往前遍历新建边的循环,这可以理解 ...

  3. Android Studio 设置编辑器(Editor)的字体、字体大小

    操作系统:Windows 10 x64 IDE:Android Studio 3.2.1 参考:https://www.cnblogs.com/diyishijian/p/6824328.html 备 ...

  4. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '***' (2)

    有时候,当我们使用“mysql”.“mysqladmin”.“mysqldump”等命令管理数据库时,服务器抛出类似如下错误: ERROR (HY000): Can't connect to loca ...

  5. gitlab报错502及处理

    报错截图: 解决: 1.端口问题 如上面写的815端口,那配置文件的8080端口都改成815端口 之后重新载入配置文件,并开启 gitlab-ctl reconfigure gitlab-ctl st ...

  6. PAT Basic 1071. 小赌怡情(15)

    题目内容 常言道"小赌怡情".这是一个很简单的小游戏:首先由计算机给出第一个整数:然后玩家下注赌第二个整数将会比第一个数大还是小:玩家下注t个筹码后,计算机给出第二个数.若玩家猜对 ...

  7. Nancy 自寄宿

    一:简介 Self Hosting 顾名思义,就是自己Host自己.也就是不需要依赖别的应用,而让应用本身就是服务.一个Console程序或者一个Winform程序都是一个应用,Self Hostin ...

  8. 删除TFS中的项目

    打开“Team Foundation Server 管理控制台”,选择应用层->团队项目集合->团队项目->点击项目集合名称,最后点击右侧出现的删除按钮

  9. Spring data JPA中使用Specifications动态构建查询

    有时我们在查询某个实体的时候,给定的条件是不固定的,这是我们就需要动态 构建相应的查询语句,在JPA2.0中我们可以通过Criteria接口查询,JPA criteria查询.相比JPQL,其优势是类 ...

  10. javascript OOP实例—探测器

    <script> /*所有探测器都有探测的方法和分析的方法,分析当前的浏览器环境,不管是浏览器还是nodejs*/ /*container容器探测器*/ /*link链接探测器*/ /*外 ...