`
sunbin
  • 浏览: 353095 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

(java)简单实现原生RabbitMQ中的广播订阅(fanout)模式

    博客分类:
  • mq
 
阅读更多

fanout 发送端

 

  1. import com.rabbitmq.client.Channel;  
  2. import com.rabbitmq.client.Connection;  
  3. import com.rabbitmq.client.ConnectionFactory;  
  4.   
  5. public class MyFanoutSender {  
  6.       
  7.      
  8.     private static final String MESSAGE = "my name is";  
  9.       
  10.     public static void main(String[] args){  
  11.         Connection conn = null;  
  12.         Channel channel = null;  
  13.         try {  
  14.             //初始化连接,主机,端口,用户名,密码可以自己定义  
  15.             ConnectionFactory factory = new ConnectionFactory();  
  16.             factory.setHost(HOST_PARAMETER.LOCAL_HOST);  
  17.             factory.setPort(HOST_PARAMETER.LOCAL_PORT);  
  18.             factory.setUsername(HOST_PARAMETER.LOCAL_USER_NAME);  
  19.             factory.setPassword(HOST_PARAMETER.LOCAL_PASSWORD);  
  20.             //创建连接  
  21.             conn = factory.newConnection();  
  22.             //创建通道  
  23.             channel = conn.createChannel();  
  24.             //定义为fanout类型的交换机  
  25.             channel.exchangeDeclare(HOST_PARAMETER.EXCHANGE_NAME, "fanout");  
  26.             //发送,指定routingkey为""  
  27.             channel.basicPublish(HOST_PARAMETER.EXCHANGE_NAME, ""null, MESSAGE.getBytes());  
  28.             System.out.println("I send a fanout massage!");  
  29.         } catch (Exception e) {  
  30.             e.printStackTrace();  
  31.         } finally{  
  32.             try {  
  33.                 if(channel != null){  
  34.                     channel.close();  
  35.                 }  
  36.                 if(conn != null){  
  37.                     conn.close();  
  38.                 }  
  39.             } catch (Exception e) {  
  40.                 e.printStackTrace();  
  41.             }  
  42.         }  
  43.     }  
  44. }  


fanout订阅者(接收端),可以自己多定义几个,才能看出效果

 

  1. import java.io.IOException;  
  2.   
  3. import com.rabbitmq.client.AMQP.BasicProperties;  
  4. import com.rabbitmq.client.Channel;  
  5. import com.rabbitmq.client.Connection;  
  6. import com.rabbitmq.client.ConnectionFactory;  
  7. import com.rabbitmq.client.Consumer;  
  8. import com.rabbitmq.client.DefaultConsumer;  
  9. import com.rabbitmq.client.Envelope;  
  10.   
  11. public class MyFirstFanoutReceiver {  
  12.       
  13.   public static void main(String[] args){  
  14.       Connection conn = null;  
  15.       Channel channel = null;  
  16.       try {  
  17.         //初始化连接  
  18.         ConnectionFactory factory = new ConnectionFactory();  
  19.         factory.setHost(HOST_PARAMETER.LOCAL_HOST);  
  20.         factory.setPort(HOST_PARAMETER.LOCAL_PORT);  
  21.         factory.setUsername(HOST_PARAMETER.LOCAL_USER_NAME);  
  22.         factory.setPassword(HOST_PARAMETER.LOCAL_PASSWORD);  
  23.         //创建连接  
  24.         conn = factory.newConnection();  
  25.         //创建通道  
  26.         channel = conn.createChannel();  
  27.         //声明交换机类型  
  28.         channel.exchangeDeclare(HOST_PARAMETER.EXCHANGE_NAME, "fanout");  
  29.         //声明默认的队列  
  30.         String queue = channel.queueDeclare().getQueue();  
  31.         //将队列与交换机绑定,最后一个参数为routingKey,与发送者指定的一样""  
  32.         channel.queueBind(queue, HOST_PARAMETER.EXCHANGE_NAME, "");  
  33.         //消费者  
  34.         Consumer consumer = new DefaultConsumer(channel){  
  35.             @Override  
  36.             public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)  
  37.                     throws IOException {  
  38.                 System.out.println(new String(body,"utf-8")+" Tom");  
  39.             }  
  40.               
  41.         };  
  42.         channel.basicConsume(queue, true, consumer);  
  43.         System.out.println("i am the first fanout receiver!");  
  44.       }catch (Exception e) {  
  45.             e.printStackTrace();  
  46.       }   
  47.   }  
  48. }  
分享到:
评论

相关推荐

    rabbitmq 发布/订阅 java 实现

    总结一下,RabbitMQ的发布/订阅模式在Java中的实现主要包括以下步骤: 1. 创建RabbitMQ连接和通道。 2. 生产者声明交换机,发布消息到交换机。 3. 消费者声明队列,将队列绑定到交换机,并消费消息。 注意,实际...

    RabbitMQ消息队列之fanout 多播模式

    总结来说,RabbitMQ的fanout多播模式是一种简单且强大的工具,它使得消息的广播变得轻松,能够有效地支持分布式系统中的通信需求。了解并熟练掌握这一模式,对于提升系统的设计灵活性和稳定性至关重要。

    spring boot整合RabbitMQ实例详解(Fanout模式)

    在本文中,我们将详细介绍 Spring Boot 整合 RabbitMQ 的实例讲解,特别是 Fanout 模式下的实现。 Fanout Exchange Fanout Exchange 是一种特殊类型的交换器,它可以将消息广播到绑定到它的所有队列中,不管路由键...

    springboot2.1.4集成rabbitmq,三种模式:fanout direct topic的实现

    本篇文章将深入探讨如何在Spring Boot 2.1.4版本中集成RabbitMQ,并实现三种主要的交换机类型:Fanout、Direct和Topic模式。 首先,我们需要在Spring Boot项目中添加RabbitMQ的相关依赖。在`pom.xml`文件中,引入`...

    springboot+RabbitMQ三种模式demo

    Fanout模式是广播模式,RabbitMQ会将消息无条件地复制到所有绑定到该交换器的队列,无需考虑路由键。每个消费者都会收到相同的消息副本,适合一发多收的场景。 现在,我们来看看如何在SpringBoot应用中实现这些...

    RabbitMQ工具类封装实现

    在IT行业中,消息队列(Message Queue,MQ)是一种常用于...综上所述,RabbitMQ工具类的封装涵盖了连接管理、订阅者和服务的实现,以及在Android环境中的应用。理解这些知识点对于构建可靠、高效的分布式系统至关重要。

    C#开发的RabbitMQ主题订阅模式,读取mysql 数据发送和解析一体

    C#开发的RabbitMQ主题订阅模式,读取mysql 数据发送和解析一体。 使用vs2019开发的,可以运行使用,在根据自己的需求加工即可,已经实现了定时读取mysql数据库数据转为json发送,消费者接受后解析的应用。可以自行...

    第11周-第06章节-Python3.5-RabbitMQ fanout广播模式.mp4

    第11周-第06章节-Python3.5-RabbitMQ fanout广播模式.mp4

    rabbitMQ实战java版-rabbitMQ-demo.zip

    本文将围绕RabbitMQ的Java实践,通过分析"rabbitMQ-demo.zip"中的示例项目"rabbitMQ-demo-main",深入讲解RabbitMQ的核心概念、工作模式以及如何在Java环境中进行集成和应用。 一、RabbitMQ核心概念 1. **Broker**...

    RabbitMQ封装为c++版本,并且使用方式为发布订阅模式

    在这个项目中,我们关注的是RabbitMQ的C++客户端库的封装以及如何实现发布订阅模式。 首先,我们要了解RabbitMQ的基本概念。RabbitMQ是一个消息代理,它接收和转发消息,充当生产者和消费者之间的桥梁。生产者是...

    java rabbitmq动态注册,监听实现

    在这个场景中,"java rabbitmq动态注册,监听实现"涉及到的主要知识点是利用Spring Boot框架与RabbitMQ集成,动态配置消费者,并实现实时监听消息。 1. **Spring Boot与RabbitMQ集成**: Spring Boot简化了...

    RabbitMQ的五种模式源码+纯手工打的代码

    扇出模式是最简单的广播模式,生产者发布消息到交换器,交换器将消息无条件地转发到所有绑定的队列,每个消费者都能接收到消息。适用于需要同步多个服务或者组件的场景。 在这些源码中,你将看到如何设置生产者和...

    spring集成rabbitMq(基于direct、topic和fanout模式)

    Fanout交换器是广播模式,它将所有发送到exchange的消息复制并分发到所有绑定到该exchange的queue。不考虑routing key,这种模式适用于需要将消息发送给所有订阅者的场景,例如发布/订阅模式。 **5. 实现示例** 在...

    rabbitmq RPC java 实现

    在Java中实现RabbitMQ的RPC,我们需要两个主要部分:一个RPC客户端,负责发送请求;另一个是RPC服务器,负责接收请求并返回响应。以下是实现这些功能的关键步骤: 1. **依赖管理**:首先,在项目中引入RabbitMQ的...

    RabbitMQ Java测试客户端

    在这个“RabbitMQ Java测试客户端”项目中,我们可以看到它包含了Java客户端的实现,这对于理解和使用RabbitMQ与Java应用程序的集成至关重要。 首先,我们要理解Java在RabbitMQ中的作用。Java客户端库允许开发者在...

    java队列源码-rabbitmq-repository:RabbitMQ消息队列学习的源码记录

    java 队列源码 #rabbitMQ repository 主要记录个人学习reabbit的相关demo rabbitmq-java-helloworld 只是第一个rabbitmq的例子 ...rabbitmq-spring-fanout spring boot使用的rabbitmq的发布订阅示例 rabb

    Java使用RabbitMq的一个简单demo

    在Java中,我们通常使用RabbitMQ的Java客户端库`com.rabbitmq:amqp-client`来与RabbitMQ服务器进行交互。首先,确保在项目中添加了此依赖项。在Maven工程的`pom.xml`文件中,可以这样添加: ```xml <groupId>...

    rabbitmq简单java实例

    在这个“rabbitmq简单java实例”中,我们将探讨如何在Java环境中集成并使用RabbitMQ。 首先,我们需要了解RabbitMQ的基本概念。在RabbitMQ中,生产者是发送消息的应用,消费者则是接收消息的应用。消息被发送到...

    使用Java编写的RabbitMQ连接池方法

    RabbitMQ客户连接池的Java实现。我们刚开始也是采用这种方式来实现的,但做压力测试时,发现这种每次新建Connection和新建Channel是非常耗时的,在大并发下,一般都要8毫秒左右,慢的话,好多都是几十毫秒。因此我们...

    Rabbitmq工具类,java工具类RabbitmqUtil

    在Java开发中,RabbitMQ是一个非常流行的开源消息队列系统,它基于AMQP(Advanced Message Queuing Protocol)协议,用于高效地处理异步任务和解耦系统组件。`RabbitmqUtil` 是一个专门为Java开发者设计的工具类,...

Global site tag (gtag.js) - Google Analytics