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. java数据库学习

    //编写db类/* a加载驱动 驱动类要全路径 包名+类名 suround with try/catch * b设置参数url user pwd * c.连接数据库(import 'Connectio ...

  2. “全栈2019”Java第五十一章:继承与final关键字详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. AutoCAD.Net圆弧半径标注延长线

    #region 注册RegApp public static void CheckRegApp(string regapptablename) { Database db = HostApplicat ...

  4. Logstash 收集 IIS 日志

    日志样例 查看 IIS 日志配置,选择格式为 W3C(默认字段设置)保存生效. 2016-02-25 01:27:04 112.74.74.124 GET /goods/list/0/1.html - ...

  5. iOS 设备定位功能可用的判断

    if ([CLLocationManager locationServicesEnabled] && ([CLLocationManager authorizationStatus] ...

  6. jquery中的正则表达式

    1.什么是正则表达式: 能让计算机读懂的字符串匹配规则. 2.正则表达式的写法: var re=new RegExp('规则', '可选参数');var re=/规则/修饰参数; 3.规则中的字符 1 ...

  7. 复制订阅服务器和 AlwaysOn 可用性组 (SQL Server)

    https://docs.microsoft.com/zh-cn/sql/database-engine/availability-groups/windows/replication-subscri ...

  8. PHP错误与异常处理

    https://www.cnblogs.com/zyf-zhaoyafei/p/6928149.html 请一定要注意,没有特殊说明:本例 PHP Version < 7 说起PHP异常处理,大 ...

  9. linux系统管理(1)之 内核编译选项查看

    三个方法 proc文件系统 ubunut debain 红帽等 proc文件系统 /proc/config.gz This file shows you the compile-time config ...

  10. python 接口(抽象) 多态,鸭子类型, 多继承原理(mro)

    抽象类与接口类 接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数 ...