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. Python操作配置文件configparser模块

    在实际的开发过程中,我们常有操作ini格式和conf格式配置文件的操作,Python为我们提供了configparser模块,方便我们对配置文件进行读写操作. config.ini配置文件内容如下: ...

  2. 不建议使用*{margin:0; padding:0}?

    是不建议用的,应该把具体的标签名都列出来,有时别人在写示例时为了方便会直接这么写; body{ magin:0;padding:0; }这种,就是清除浏览器有可能默认设置边距: 因为“在全局范围使用* ...

  3. “全栈2019”Java第七十五章:内部类持有外部类对象

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

  4. AOP之 Filter实用

    前言 开心一笑~~~ 一个年轻的程序员和一个项目经理登上了一列在山里行驶的火车,他们发现列车上几乎都坐满了,只有两个在一起的空位,这个空位的对面是一个老奶奶和一个年轻漂亮的姑娘.两个上前坐了下来.程序 ...

  5. C# - 操作大型XML文件

    对于小型XML文件,利用XDocument和XMLDocument可以很方便进行读写(推荐XDocument),但问题是XDocument和XMLDocument是In-Memory类型的,随着文件大 ...

  6. 函数新特性、内联函数、const详解

    一.函数回顾与后置返回类型 函数定义中,形参如果在函数体内用不到的话,则可以不给形参变量名字,只给其类型. 函数声明时,可以只有形参类型,没有形参名 把函数返回类型放到函数名字之前,这种写法,叫前置返 ...

  7. 编程开发之--Oracle数据库--存储过程使用动态参数绑定(3)

    1.动态参数绑定,可以实现动态的执行不同的sql --创建包 create or replace PACKAGE MYPACKAGE AS type empcursor is ref cursor; ...

  8. [Java]去除html中的标签或者元素属性(正则表达式)

    后台的数据库中某个字段是富文本框输入的 带有Html的标签 ,去掉标签后返回给前台 1.去掉Html 标签的代码 //过滤html标签 Pattern p_html = Pattern.compile ...

  9. docker 安装sentry

    主页:https://sentry.io/welcome/ 环境安装 请先安装 Docker 1.10+ ,使用 CE 版本:安装文档,写的很清晰,不详述:因为国内网络环境问题,一般建议 docker ...

  10. AC自动机模板题

    AC自动机学习博客 AC自动机理解要点: 1)fail指针指向的是每个节点,在字典树上和这个节点后缀相同的最长单词,每次都这样匹配,必定不会漏过答案. 2)字典树建立后,会在bfs求fail阶段把字典 ...