rabbit的fanout扇形交换机
rabbit引入交换机概念。
交换机与生产者绑定。
队列与消费者绑定。
队列又与交换机绑定。
扇形交换机是 fanout类型的。
类似于其他消息中间件的 topic。一对多(生产者推送消息到指定交换机,一个或多个绑定了此交换机的消费者的队列都可以收到此交换机的消息)
生产者:
package com.kf.queueDemo.exchange.fanout; import java.io.IOException;
import java.util.concurrent.TimeoutException; import com.kf.utils.RabbitConnectionUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection; /**
* fanout 扇形交换机
* @author kf
*生产者与交换机做绑定,消费者的队列与交换机做绑定
*/
public class FanoutProducer { private static String EXCHANGENAME = "MYEXCHANGE"; public static void main(String[] args) throws IOException, TimeoutException { Connection connection = RabbitConnectionUtils.getConnection(); Channel channel = connection.createChannel();
//绑定交换机。第一个参数是交换机的名字,第二个是交换机的类型
channel.exchangeDeclare(EXCHANGENAME, "fanout"); String mes = "exchange_mes"; //发布消息
channel.basicPublish(EXCHANGENAME, "", null, mes.getBytes());
System.out.println("fanout发送消息"+mes);
channel.close();
connection.close();
} }
消费者:
package com.kf.queueDemo.exchange.fanout; 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;
/**
* fanout消费者(消费者创建队列,声明队列与交换机的绑定关系)
* @author kf
*
*/
public class FanoutEmail_Consumer { private static String EXCHANGENAME = "MYEXCHANGE"; private static String EMAIL_QUEUE = "EMAIL_QUEUE"; public static void main(String[] args) throws IOException, TimeoutException {
System.out.println("邮件消费者已启动==============");
Connection connection = RabbitConnectionUtils.getConnection();
Channel channel = connection.createChannel();
//声明消费者队列
channel.queueDeclare(EMAIL_QUEUE, false, false, false, null);
//队列绑定交换机
channel.queueBind(EMAIL_QUEUE, EXCHANGENAME, ""); 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("EMAIL消费者监听");
String s = new String(body, "utf-8");
System.out.println("监听到消息:"+s);
};
};
//通道监听 自动签收
channel.basicConsume(EMAIL_QUEUE, true,consumer); } }
package com.kf.queueDemo.exchange.fanout; 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; /**
* fanout消费者(消费者创建队列,声明队列与交换机的绑定关系)
* @author kf
*
*/
public class FanoutSMS_Consumer { private static String EXCHANGENAME = "MYEXCHANGE"; private static String SMS_QUEUE = "SMS_QUEUE"; public static void main(String[] args) throws IOException, TimeoutException {
System.out.println("短信消费者已启动==============");
Connection connection = RabbitConnectionUtils.getConnection();
Channel channel = connection.createChannel();
//声明消费者队列
channel.queueDeclare(SMS_QUEUE, false, false, false, null);
//队列绑定交换机
channel.queueBind(SMS_QUEUE, EXCHANGENAME, ""); 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("SMS消费者监听");
String s = new String(body, "utf-8");
System.out.println("监听到消息:"+s);
};
};
//通道监听 自动签收
channel.basicConsume(SMS_QUEUE, true,consumer); } }
rabbit的fanout扇形交换机的更多相关文章
- rabbitmq学习(三):rabbitmq之扇形交换机、主题交换机
前言 上篇我们学习了rabbitmq的作用以及直连交换机的代码实现,这篇我们继续看如何用代码实现扇形交换机和主题交换机 一.扇形交换机 1.生产者 /** * 生产者 */ public class ...
- RabbitMQ入门教程(五):扇形交换机发布/订阅(Publish/Subscribe)
原文:RabbitMQ入门教程(五):扇形交换机发布/订阅(Publish/Subscribe) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. ...
- 10.RabbitMQ Fanout类型交换机
Fanout类型交换机忽略Routing Key,它将消息传递到所有与它绑定的队列上. Producer.java package com.test.fanout; import co ...
- Rabbit的直连交换机direct
直连交换机类型为:direct.加入了路由键routingKey的概念. 就是说 生产者投递消息给指定交换机的指定路由键. 只有绑定了此交换机指定路由键的消息队列才可以收到消息. 生产者: packa ...
- rabbitMq及安装、fanout交换机-分发(发布/订阅)
<dependency> <groupId>com.rabbitmq</groupId> <artifactId& ...
- 关于RabbitMQ交换机的理解
RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面表现不俗.消息中间件主要用于组件之间的解耦,消 ...
- 基于springboot整合的rabbitmq
技术:springboot1.5.2 + maven3.0.5 + rabbitmq3.7.13 + jdk1.8 概述 RabbitMQ是对高级消息队列协议(Advanced Message Q ...
- 高性能RabbitMQ
1,什么是RabbitMq RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件).RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开 ...
- NET 5 使用RabbitMQ以及Kafka区别
区别 1.应用场景方面RabbitMQ:用于实时的,对可靠性要求较高的消息传递上.kafka:用于处于活跃的流式数据,大数据量的数据处理上.2.架构模型方面producer,broker,consum ...
随机推荐
- Mysql数据类型《四》日期类型
日期类型 DATE TIME DATETIME TIMESTAMP YEAR 作用:存储用户注册时间,文章发布时间,员工入职时间,出生时间,过期时间等 YEAR YYYY(1901/2155) DAT ...
- [Android] Android MVP 架构下 最简单的 代码实现
Android MVP 架构下 最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...
- Python——深拷贝和浅拷贝
深拷贝.浅拷贝 1. 浅拷贝 浅拷贝是对于一个对象的顶层拷贝 import copy a = [[1, 2], 3] b = copy.copy(a) print(id(a)) print(id(b) ...
- 【BZOJ1055】[HAOI2008]玩具取名(区间DP)
[HAOI2008]玩具取名 题目描述 某人有一套玩具,并想法给玩具命名.首先他选择\(WING\)四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用" ...
- (STM32F4) Timer Compare mode 操作
Timer 比較模式(compare) 具體會用在哪種狀況目前還沒有這種經驗,但Compare有配置功能pin想必有應用會用到這個模式 從Function Block來看比較模式比基本Timer多了比 ...
- SimpleITK学习(二)图像读取
通常我会用simpleitk来读取dicom文件,主要是为了将dicom文件转换为numpy矩阵,便于输入神经网络,读取dicom文件可分为两种情况,一.单独的dicom文件 二.一系列dicom文件 ...
- Ant demo
<?xml version="1.0" encoding="UTF-8"?> <!-- 定义一个工程,默认任务为warFile. --> ...
- ORACLE的WITH语句的一个疑惑
使用WITH语句,更新表数据,不行: WITH VN AS ( SELECT T.ID, T.NODE_ID, N.NODE_TYPE, N.NODE_NAME, T.NODE_LEVEL, T.RN ...
- Angular material mat-icon 资源参考_File
ul,li>ol { margin-bottom: 0 } dt { font-weight: 700 } dd { margin: 0 1.5em 1.5em } img { height: ...
- Locust源码目录结构及模块作用
Locust源码目录结构及模块作用如下: 参考文章:https://blog.csdn.net/biheyu828/article/details/84031942