博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rabbitmq routing and binding relation
阅读量:6738 次
发布时间:2019-06-25

本文共 2484 字,大约阅读时间需要 8 分钟。

hot3.png

binding代表了exchange和queue之间的关系,说明了queue对哪些消息感兴趣

channel.queueBind(queueName,EXCHANGE_NAME,"black")

Direct exchange

上面是将所有的消息发送给消费者,我们想要通过特殊的标示去筛除一些消息,这样可以减少磁盘的浪费,可以关注更多特定的消息

这时可以使用direct exchange binding key matches routing key

adc444d0d6685ea00d9a93ccf190f5956e6.jpg

 

x绑定了两个queue,一个queue 的binding key是 orange ,另一个是queue 的binding key是 black,green

其他消息将会被丢弃

09f659ebc07eedf7bab707d6347a2be249c.jpg

 

将多个队列绑定同一个binding key 也是允许的,这就相当于一种广播的形式

日志类型消息模型如下

9933c92d55023c434036649c823481467c4.jpg

 

 

public class RemitLogDirect {

public static final String EXCHANGE_NAME = "direct_log";

 

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

ConnectionFactory factory = new ConnectionFactory();

factory.setHost("localhost");

try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {

channel.exchangeDeclare(EXCHANGE_NAME, "direct");

 

String serverity = getServerity(args);

String message = getMessage(args);

channel.basicPublish(EXCHANGE_NAME, serverity, null, message.getBytes(Charset.defaultCharset()));

System.out.println(" [x] send '" + serverity + ":" + message + "'");

}

 

}

 

private static String getMessage(String[] args) {

Preconditions.checkNotNull(args, "传入参数%s不能为空", args);

String backMessage = "";

for (String type : args) {

//some info

}

return backMessage;

}

 

private static String getServerity(String[] args) {

Preconditions.checkNotNull(args, "传入参数%s不能为空", args);

 

for (String type : args) {

if (type.equals("error")) {

return "error";

}

if (type.equals("info")) {

return "info";

}

if (type.equals("warn")) {

return "warn";

}

}

return "undefined";

}

}

 

 

public class ReceiveLogsDirect {

 

private static final String EXCHANGE_NAME = "direct_logs";

 

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

ConnectionFactory factory = new ConnectionFactory();

factory.setHost("localhost");

Connection connection = factory.newConnection();

 

Channel channel = connection.createChannel();

channel.exchangeDeclare(EXCHANGE_NAME, "direct");

String queueName = channel.queueDeclare().getQueue();

if (args.length < 1) {

System.out.println("Usages ReceiveLogsDirect [info] [warning] [error]");

System.exit(1);

}

for (String serverity : args) {

channel.queueBind(queueName, EXCHANGE_NAME, serverity);

}

System.out.println("[x] waiting for messages ,to exit press c");

 

DeliverCallback deliverCallback = ((consumerTag, delivery) -> {

String message = new String(delivery.getBody(), "UTF-8");

System.out.println("[x] received ...." + message);

 

 

});

 

 

channel.basicConsume(queueName, true, deliverCallback, consumerTag -> {

});

}

}

转载于:https://my.oschina.net/iioschina/blog/3020845

你可能感兴趣的文章
Java中的多线程,线程池
查看>>
软件下载站
查看>>
Zend Studio 12 生成 WSDL
查看>>
JAVA学习心得
查看>>
【夯实Mysql基础】记一次mysql语句的优化过程
查看>>
VBPR: Visual Bayesian Personalized Ranking from Implicit Feedback-AAAI2016 -20160422
查看>>
servlet injection analysis
查看>>
(原)centos7安装和使用greenplum4.3.12(详细版)
查看>>
Hive之 hive与hadoop的联系
查看>>
java中的==、equals()、hashCode()源码分析
查看>>
HDU 3613 Best Reward 正反两次扩展KMP
查看>>
zepto.js 源码解析
查看>>
HTTP状态码大全
查看>>
使用ASP.NET Web API 2创建OData v4 终结点
查看>>
MyBatis简单的增删改查以及简单的分页查询实现
查看>>
Android快捷支付SDK Demo resultStatus={4001};memo={參数错误};result={}问题
查看>>
urllib2中自定义opener
查看>>
Hadoop快速入门
查看>>
MySql_安装及简单命令
查看>>
CSDN markdown 编辑器 第四篇 LaTex语法
查看>>