Rabbit的直连交换机direct
直连交换机类型为:direct。加入了路由键routingKey的概念。
就是说 生产者投递消息给指定交换机的指定路由键。
只有绑定了此交换机指定路由键的消息队列才可以收到消息。
生产者:
package com.kf.queueDemo.exchange.direct; import java.io.IOException;
import java.util.concurrent.TimeoutException; import com.kf.utils.RabbitConnectionUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection; /**
* 路由模式的生产者(带路由键)
* @author kf
*
*/
public class DirectProducer {
//交换机
private static String DIRECTEXCHANGE = "DIRECTEXCHANGE";
//路由键
private static String ROUTINGKEY = "SMS"; public static void main(String[] args) throws IOException, TimeoutException { Connection connection = RabbitConnectionUtils.getConnection();
Channel channel = connection.createChannel();
//声明交换机类型为路由模式
channel.exchangeDeclare(DIRECTEXCHANGE, "direct"); String msg = "direct_mes"; //发送消息给 指定交换机EXCHANGENAME的指定路由键ROUTINGKEY上
channel.basicPublish(DIRECTEXCHANGE, ROUTINGKEY, null, msg.getBytes()); channel.close();
connection.close(); } }
消费者:
package com.kf.queueDemo.exchange.direct; import java.io.IOException;
import java.util.concurrent.TimeoutException; import com.kf.utils.RabbitConnectionUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DefaultConsumer;
/**
* 路由模式的邮件消费者
* @author kf
*
*/
public class DirectEMAILConsumer {
//队列名
private static String EMAILQUEUENAME = "EMAILQUEUENAME";
//路由键名
private static String SMSROUTINGKEY = "SMS";
private static String EMAILROUTINGKEY = "EMAIL";
//交换机
private static String DIRECTEXCHANGE = "DIRECTEXCHANGE"; public static void main(String[] args) throws IOException, TimeoutException {
System.out.println("邮件消费者启动=====");
Connection connection = RabbitConnectionUtils.getConnection();
Channel channel = connection.createChannel();
//创建队列:第一个参数是队列名,后面的参数还没搞清楚干嘛的
channel.queueDeclare(EMAILQUEUENAME, false, false, false, null);
//绑定队列到交换机的指定路由键
channel.queueBind(EMAILQUEUENAME, DIRECTEXCHANGE, EMAILROUTINGKEY); DefaultConsumer consumer = new DefaultConsumer(channel){
public void handleDelivery(String consumerTag, com.rabbitmq.client.Envelope envelope, com.rabbitmq.client.AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("进入邮件接收消息的监听");
String s = new String(body, "utf-8");
System.out.println("邮件消费者接收到消息:"+s);
};
}; //参数分别是:队列名,是否自动应答,监听的回调类
channel.basicConsume(EMAILQUEUENAME, true, consumer); } }
package com.kf.queueDemo.exchange.direct; import java.io.IOException;
import java.util.concurrent.TimeoutException; import com.kf.utils.RabbitConnectionUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DefaultConsumer; /**
* 路由模式的短信消费者
* @author kf
*
*/
public class DirectSMSConsumer {
//队列名
private static String SMSQUEUENAME = "SMSQUEUENAME";
//路由键名
private static String SMSROUTINGKEY = "SMS";
private static String EMAILROUTINGKEY = "EMAIL";
//交换机
private static String DIRECTEXCHANGE = "DIRECTEXCHANGE"; public static void main(String[] args) throws IOException, TimeoutException {
System.out.println("短信消费者启动=====");
Connection connection = RabbitConnectionUtils.getConnection();
Channel channel = connection.createChannel();
//创建队列:第一个参数是队列名,后面的参数还没搞清楚干嘛的
channel.queueDeclare(SMSQUEUENAME, false, false, false, null);
//绑定队列到交换机的指定路由键
channel.queueBind(SMSQUEUENAME, DIRECTEXCHANGE, SMSROUTINGKEY);
//绑定多个交换机的路由键
channel.queueBind(SMSQUEUENAME, DIRECTEXCHANGE, EMAILROUTINGKEY); DefaultConsumer consumer = new DefaultConsumer(channel){
public void handleDelivery(String consumerTag, com.rabbitmq.client.Envelope envelope, com.rabbitmq.client.AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("进入短信接收消息的监听");
String s = new String(body, "utf-8");
System.out.println("短信消费者接收到消息:"+s);
};
}; //参数分别是:队列名,是否自动应答,监听的回调类
channel.basicConsume(SMSQUEUENAME, true, consumer); } }
Rabbit的直连交换机direct的更多相关文章
- RabbitMQ指南之四:路由(Routing)和直连交换机(Direct Exchange)
在上一章中,我们构建了一个简单的日志系统,我们可以把消息广播给很多的消费者.在本章中我们将增加一个特性:我们可以订阅这些信息中的一些信息.例如,我们希望只将error级别的错误存储到硬盘中,同时可以将 ...
- RabbitMQ --- 直连交换机 【 有回调方法,获取消费结果 】
1.前言 上一随笔详细记录了直连交换机的方法,发送的消息是异步的,如果消息未被消费者消费,那么可以一直存在消息队列中. 那么有没有办法做一个回调,当消息被消费后,被通知消息成功被消费者消费啦? 答案是 ...
- RabbitMQ --- 直连交换机 【 无回调方法,不能获取消费结果 】
1.前言 消息队列除了kafka 外,还有许多种,比如RabbitMQ .ActiveMQ.ZeroMQ.JMQ等. 老牌的ActiveMQ ,底层使用Java写的,资源消耗大,速度也慢,但是适合 J ...
- rabbitmq学习(二):rabbitmq(消息队列)的作用以及rabbitmq之直连交换机
前言 上篇介绍了AMQP的基本概念,组成及其与rabbitmq的关系.了解了这些东西后,下面我们开始学习rabbitmq(消息队列)的作用以及用java代码和rabbitmq通讯进行消息发布和接收.因 ...
- rabbitmq 交换机模式一 直连模式 direct
代码 <?php require_once "./vendor/autoload.php"; use PhpAmqpLib\Connection\AMQPStreamConn ...
- rabbitMq交换机direct、topics
一: direct 上面我用采用了广播的模式进行消息的发送,现在我们采用路由的方式对不同的消息进行过滤 发送端代码 public class RoutingSendDirect { private s ...
- rabbit的fanout扇形交换机
rabbit引入交换机概念. 交换机与生产者绑定. 队列与消费者绑定. 队列又与交换机绑定. 扇形交换机是 fanout类型的. 类似于其他消息中间件的 topic.一对多(生产者推送消息到指定交换 ...
- RabbitMQ --- 直连交换机 【 同步操作,等到消费者处理完后返回处理结果 】
1.前言 RabbleMQ这种消息中间件,主要的功能是使用异步操作,来达到解耦的目的,比如,有系统a和系统b, 系统a通过消息中间件通知系统b来做业务,那么系统a只需要把要做的事情[也就是消息]发给消 ...
- 【Android】 Android-wifi 直连 wifi direct wifi p2p
现在,Android的支持Wi -Fi的直接点对点点对点(P2P)Android系统的供电设备和其他类型的设备,没有一个热点或互联网连接之间的连接.Android框架提供了一套Wi - Fi的P2P的 ...
随机推荐
- 二. linux基础命令
linux的基本命令一般有100多个,多练就可以了: 如果登陆用户是root,那么是#:如果是其他用户,则显示的是$ 练习:基本命令 1.创建一个目录/data mkdir /data ...
- 936. Stamping The Sequence
You want to form a target string of lowercase letters. At the beginning, your sequence is target.len ...
- kvm linux虚拟机在线扩展磁盘
说明: 1) vmware ESXi虚拟化平台也支持这台在线扩展磁盘功能. 2) kvm虚拟机也支持在线扩展磁盘功能,在线扩展有特定的使用环境,主要用于不能随便停用的生产环境中. 3) 经过测试KVM ...
- 将整个文件读入string中
size_t GetFileSize(FILE* file) { fseek(file, , SEEK_END); return static_cast<size_t>(ftell(fil ...
- Linux一些常用的基础命令,总结的很好,收藏了
原文地址:https://www.cnblogs.com/yjd_hycf_space/p/7730690.html
- 题目1008:最短路径问题(SPFA算法)
问题来源 http://ac.jobdu.com/problem.php?pid=1008 问题描述 给定一个G(V,E)有向图,起点s以及终点t,求最短路径. 问题分析 典型的单源最短路径问题,可以 ...
- vue-cli 3.5 解决 typescript cannot find file 问题。
版本: "ts-loader": "^3.5.0","typescript": "^3.3.4000", "v ...
- 1093 字符串A+B (20 分)
#include <iostream> using namespace std; int main() { int n; string s1, s2; getline(cin,s1); g ...
- LESS从入门到精通
LESS从入门到精通 一.LESS是什么 LESS 是 CSS预处理语言,是 CSS 的扩展. 然后说说比较流行的几款预编译器:SASS/SCSS.LESS.Stylus. SASS 学习网站: ht ...
- c# 引用类型对象的深拷贝
c#中的对象大体分为值类型和引用类型,值类型大致包括 int, struct等,引用类型大致包括 自定义Class,object 等.string属于特殊的引用类型,不在本文的讨论之内. 值类型直接存 ...