RabbitMQ-fanout模式

文章介绍了如何在RabbitMQ中设置广播模式,通过Java编写生产者和消费者代码进行消息传递。首先,列举了所需的Maven依赖,然后详细展示了生产者如何声明交换机并发送消息,以及消费者如何接收和处理消息。此外,还强调了配置阿里云或腾讯云安全组以开放必要端口的重要性。
摘要由CSDN通过智能技术生成

目录

广播模式

准备

1.生产者代码

2.消费者代码

3.阿里云安全组或腾讯云防火墙开放5672端口(15672是控制台的web端口,5672连接端口)

4.创建三个消费者和一个生产者

 5.启动三个消费者

6.启动生产者,三个消费者都收到消息


广播模式

        简单的讲,就是把交换机(Exchange)里的消息发送给所有绑定该交换机的队列,忽略routingKey。

准备

创建一个maven

导入依赖

    <dependency>
      <groupId>com.rabbitmq</groupId>
      <artifactId>amqp-client</artifactId>
      <version>5.10.0</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.amqp</groupId>
      <artifactId>spring-amqp</artifactId>
      <version>2.2.5.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.amqp</groupId>
      <artifactId>spring-rabbit</artifactId>
      <version>2.2.5.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-amqp</artifactId>
      <version>3.0.4</version>
    </dependency>

1.生产者代码

package com.sj;
import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;
//广播模式-消息生产者
public class Producer {
    public static void main(String[] args) {

        //New一个RabbitMQ的连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置需要连接的RabbitMQ地址,这里指向本机
        factory.setHost("安装RabbitMQ的服务器地址");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("admin");
        factory.setPassword("admin");
        try {
            //尝试获取一个连接
            Connection connection = factory.newConnection();
            //尝试创建一个channel
            Channel channel = connection.createChannel();
            String message = "我是生产者生产的消息";
            //声明交换机(参数为:交换机名称; 交换机类型,广播模式)
            channel.exchangeDeclare("fanoutLogs", BuiltinExchangeType.FANOUT);
            //消息发布(参数为:交换机名称; routingKey,忽略。在广播模式中,生产者声明交换机的名称和类型即可)
            channel.basicPublish("fanoutLogs","", null,message.getBytes());
//            logger.info("********Message********:发送成功");
            System.out.println("********Message********:发送成功");
            channel.close();
            connection.close();
        } catch (IOException |TimeoutException e) {
            e.printStackTrace();
        }
    }
}

2.消费者代码

package com.sj;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

//广播模式-消息消费者
public class Consumer1 {

    public static void main(String[] args) {

        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("安装rabbitMQ的服务器地址");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("admin");
        factory.setPassword("admin");
        try {
            Connection connection = factory.newConnection();
            Channel channel = connection.createChannel();
            //交换机声明(参数为:交换机名称;交换机类型)
            channel.exchangeDeclare("fanoutLogs",BuiltinExchangeType.FANOUT);
            //获取一个临时队列
            String queueName = channel.queueDeclare().getQueue();
            //队列与交换机绑定(参数为:队列名称;交换机名称;routingKey忽略)
            channel.queueBind(queueName,"fanoutLogs","");

            System.out.println("********Waiting for messages********");

            //这里重写了DefaultConsumer的handleDelivery方法,因为发送的时候对消息进行了getByte(),在这里要重新组装成String
            com.rabbitmq.client.Consumer consumer = new DefaultConsumer(channel) {
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    super.handleDelivery(consumerTag, envelope, properties, body);
                    String message = new String(body,"UTF-8");
                    System.out.println("received:" + message);
                }
            };

            //声明队列中被消费掉的消息(参数为:队列名称;消息是否自动确认;consumer主体)
            channel.basicConsume(queueName,true,consumer);
            //这里不能关闭连接,调用了消费方法后,消费者会一直连接着rabbitMQ等待消费
        } catch (IOException |TimeoutException e) {
            e.printStackTrace();
        }


    }

}

3.阿里云安全组或腾讯云防火墙开放5672端口(15672是控制台的web端口,5672连接端口)

4.创建三个消费者和一个生产者

        

 5.启动三个消费者

6.启动生产者,三个消费者都收到消息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值