rabbitmq服务端消费端实例(direct和fanout模式)

  1. 配置文件
java 复制代码
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
/**
 */
public class RabbitMQConnectionUtilLocal {
    public static Connection getConnection() throws Exception {
        // 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        // 设置RabbitMQ主机地址
        factory.setHost("localhost");
        // 设置RabbitMQ端口
        factory.setPort(5672);
        // 设置虚拟主机、用户名和密码
        factory.setVirtualHost("/");
        factory.setUsername("guest");
        factory.setPassword("guest");
        factory.setAutomaticRecoveryEnabled(true); // 自动重连


        // 返回连接
        return factory.newConnection();
    }
}
  1. direct生产端
java 复制代码
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

public class RoutingProducer {
    private final static String EXCHANGE_NAME = "direct_exchange";

    public static void main(String[] argv) throws Exception {
        // 获取到连接
        Connection connection = RabbitMQConnectionUtil.getConnection();
        // 从连接中创建通道
        Channel channel = connection.createChannel();

        // 声明交换器
        channel.exchangeDeclare(EXCHANGE_NAME, "direct");

        // 发送消息
        String message1 = "{\"flag\":0,\"idList\":[\"1\"]}";
        String message2 = "Info log message";
        String message3 = "Warning log message";

        channel.basicPublish(EXCHANGE_NAME, "error", null, message1.getBytes());
        System.out.println(" [x] Sent '" + message1 + "'");

        channel.basicPublish(EXCHANGE_NAME, "info", null, message2.getBytes());
        System.out.println(" [x] Sent '" + message2 + "'");

        channel.basicPublish(EXCHANGE_NAME, "warning", null, message3.getBytes());
        System.out.println(" [x] Sent '" + message3 + "'");

        // 关闭通道和连接
        channel.close();
        connection.close();
    }
}
  1. fanout生产端
java 复制代码
import com.rabbitmq.client.*;
import jzy.util.RabbitMQConnectionUtil;

public class FanoutExchangeExample {
    private static final String EXCHANGE_NAME = "20250917test1";

    public static void main(String[] argv) throws Exception {
        Connection connection = RabbitMQConnectionUtilLocal.getConnection();
        Channel channel = connection.createChannel();

        // 声明Fanout类型的交换器,第三个参数是持久化标记
        channel.exchangeDeclare(EXCHANGE_NAME, "fanout",true);

        // 创建队列并绑定到交换器
        String queueName = channel.queueDeclare().getQueue();
        channel.queueBind(queueName, EXCHANGE_NAME, "");

        // 发送消息
        String message = "This is a log message";
        channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes("UTF-8"));
        System.out.println(" [x] Sent '" + message + "'");

        channel.close();
        connection.close();
    }
}
  1. 消费端
java 复制代码
package jzy.util;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.rabbitmq.client.*;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

public class RabbitMQConsumer {
//    private final static String EXCHANGE_NAME = "direct_exchange";
//    private final static String QUEUE_NAME = "error_log_queue";

    private final static String EXCHANGE_NAME = "position_exchange";
    private final static String QUEUE_NAME = "LZF0101_queue";

    public static void main(String[] argv) throws Exception {
        // 获取到连接
        Connection connection = RabbitMQConnectionUtil.getConnection();
        // 从连接中创建通道
        Channel channel = connection.createChannel();

        // 声明队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        // 绑定队列到交换器,并指定路由键
        channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "LZF0101_topic");

        // 定义队列的消费者
        DefaultConsumer consumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws java.io.IOException {
                String message = new String(body, "UTF-8");
                JSONObject jsonObject = JsonUtil.getJsonToBean(replaceNbspWithSpace(message), JSONObject.class);
                try {
                    switch (jsonObject.getStr("flag")) {
                     
                        default:
                            break;
                    }
                } catch (Exception e) {
               
                    throw new RuntimeException(e);
                }
                System.out.println(" [x] Received  Log: '" + message + "'");
            }
        };

        // 监听队列
        channel.basicConsume(QUEUE_NAME, true, consumer);
    }

    /**
     * 正则过滤生产端信息特殊符号,过滤 NBSP
     */
    public static String replaceNbspWithSpace(String str) {
        if (str == null) {
            return null;
        }
        return str.replaceAll("\\u00A0", " ");
    }
}
相关推荐
2509_940880222 分钟前
分布式监控Skywalking安装及使用教程(保姆级教程)
分布式·skywalking
creator_Li5 分钟前
分布式相关的好文章收集
分布式
扛着太阳17 分钟前
【Cloudberry(一)安装分布式数据库集群】
数据库·分布式
晚霞的不甘21 分钟前
分布式能力实战:Flutter + OpenHarmony 的跨设备协同开发
分布式·flutter
l***466829 分钟前
RabbitMQ 集群部署方案
分布式·rabbitmq·ruby
TracyCoder12332 分钟前
分布式算法(八):一致性哈希——分布式系统的负载均衡利器
分布式·算法·哈希算法
veminhe32 分钟前
RabbitMQ(一)安装与基本使用
rabbitmq
代码改善世界9 小时前
【前瞻创想】Kurator:驾驭分布式云原生世界的“统一舰队”
分布式·云原生
行走正道9 小时前
【前瞻创想】标准之争:论Kurator在分布式云原生API标准化中的潜在角色
分布式·api·kurator·标准化·策略驱动
5***V9339 小时前
MacOS升级ruby版本
开发语言·macos·ruby