rabbit的fanout扇形交换机

时间:2022-09-28 08:25:18

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扇形交换机的更多相关文章

  1. rabbitmq学习(三):rabbitmq之扇形交换机、主题交换机

    前言 上篇我们学习了rabbitmq的作用以及直连交换机的代码实现,这篇我们继续看如何用代码实现扇形交换机和主题交换机 一.扇形交换机 1.生产者 /** * 生产者 */ public class ...

  2. RabbitMQ入门教程(五):扇形交换机发布/订阅(Publish/Subscribe)

    原文:RabbitMQ入门教程(五):扇形交换机发布/订阅(Publish/Subscribe) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. ...

  3. 10.RabbitMQ Fanout类型交换机

    Fanout类型交换机忽略Routing Key,它将消息传递到所有与它绑定的队列上.       Producer.java package com.test.fanout;   import co ...

  4. Rabbit的直连交换机direct

    直连交换机类型为:direct.加入了路由键routingKey的概念. 就是说 生产者投递消息给指定交换机的指定路由键. 只有绑定了此交换机指定路由键的消息队列才可以收到消息. 生产者: packa ...

  5. rabbitMq及安装、fanout交换机-分发(发布/订阅)

    <dependency>            <groupId>com.rabbitmq</groupId>            <artifactId& ...

  6. 关于RabbitMQ交换机的理解

    RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面表现不俗.消息中间件主要用于组件之间的解耦,消 ...

  7. 基于springboot整合的rabbitmq

    技术:springboot1.5.2 + maven3.0.5 + rabbitmq3.7.13 + jdk1.8   概述 RabbitMQ是对高级消息队列协议(Advanced Message Q ...

  8. 高性能RabbitMQ

    1,什么是RabbitMq RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件).RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开 ...

  9. NET 5 使用RabbitMQ以及Kafka区别

    区别 1.应用场景方面RabbitMQ:用于实时的,对可靠性要求较高的消息传递上.kafka:用于处于活跃的流式数据,大数据量的数据处理上.2.架构模型方面producer,broker,consum ...

随机推荐

  1. 第十周PSP

    第十周PSP   工作周期:11.17-11.24  本周PSP: C类型 C内容 S开始时间 ST结束时间 I中断时间 T净时间(分) 文档 写随笔(PSP) 16:20min 16:50min 0 ...

  2. &lbrack;Javascript&rsqb; The &quot&semi;this&quot&semi; keyword

    The very first thing to understand when we're talking about this-keyword is really understand what's ...

  3. 关于WP8 微信分享的补充说明

    1.根据微信官方Demo完成相应功能. 2.在分享完后,从微信回来,需要进行 快速恢复. 3.在快速恢复中加入 RootFrame.Navigating += HandlerFotResetNavig ...

  4. 百度预测 及 maven pom搜索地址

    http://trends.baidu.com/ http://mvnrepository.com/artifact/net.sourceforge.htmlcleaner/htmlcleaner/2 ...

  5. Oracle11g客户端安装及plsql配置

    1,项目使用的是oracle11g数据库,安装个客户端访问服务器. 到oracle官方下载: http://www.oracle.com/technology/global/cn/software/t ...

  6. 大数据技术 vs 数据库一体机&lbrack;转&rsqb;

    http://blog.sina.com.cn/s/blog_7ca5799101013dtb.html 目前,虽然大数据与数据库一体机都很火热,但相当一部分人却无法对深入了解这两者的本质区别.这里便 ...

  7. P5305 &lbrack;GXOI&sol;GZOI2019&rsqb;旧词

    题目地址:P5305 [GXOI/GZOI2019]旧词 这里是官方题解 \[\sum_{i \leq x}^{}\ depth(lca(i,y))^k\] \(k = 1\) 求的是 \(\sum_ ...

  8. wrapper induction随笔

    本文是一篇介绍Wrapper Induction的阅读笔记,原文详见<Wrapper induction:Efficiency and expressiveness>. Wrapper I ...

  9. tomcat闪退

    tomcat/bin/setclasspath.bat 用记事本打开 在setclasspath.bat的文件里添加两行代码,告诉tomcat,jdk和jre的位置(添加位置在: rem Make s ...

  10. 在dbgrideh中允许选择多行,如何知道哪些行被选中

    是个BOOKMARK类型的属性. SelectedRows: TBookmarkList procedure TForm1.Button1Click(Sender: TObject); var i, ...