rabbitMQ的direct模式的生产者与消费者使用案例

消费者C1的RoutingKey 规则按照info warn 两种RoutingKey匹配 绑定队列console

java 复制代码
package com.esint.rabbitmq.work03;


import com.esint.rabbitmq.RabbitMQUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;

/**
 * 消费者01的消息接受
 */
public class ReceiveLog01 {

    public static final String EXCHANGE_NAME = "logs";

    public static void main(String[] args) throws Exception {

        //获取信道
        Channel channel = RabbitMQUtils.getChannel();
        //声明一个交换机
        channel.exchangeDeclare(EXCHANGE_NAME,"fanout");

        /**
         *声明一个队列  队列名字随机
         * 消费者断开与队列的链接后 队列自动删除
         */
        String queue = channel.queueDeclare().getQueue();

        /**
         * 绑定交换机与队列
         * 1.队列名字
         */
        channel.queueBind(queue,EXCHANGE_NAME,"");
        System.out.println("wait print message...");

        DeliverCallback deliverCallback = (var,var2)->{
            System.out.println("01:"+new String(var2.getBody()));
        };
        channel.basicConsume(queue,true,deliverCallback, var->{});

    }
}

消费者C2的RoutingKey 规则按照error RoutingKey匹配 绑定队列disk

java 复制代码
package com.esint.rabbitmq.work03;


import com.esint.rabbitmq.RabbitMQUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;

/**
 * 消费者02的消息接受
 */
public class ReceiveLog02 {

    public static final String EXCHANGE_NAME = "logs";

    public static void main(String[] args) throws Exception {

        //获取信道
        Channel channel = RabbitMQUtils.getChannel();
        //声明一个交换机
        channel.exchangeDeclare(EXCHANGE_NAME,"fanout");

        /**
         *声明一个队列  队列名字随机
         * 消费者断开与队列的链接后 队列自动删除
         */
        String queue = channel.queueDeclare().getQueue();

        /**
         * 绑定交换机与队列
         * 1.队列名字
         */
        channel.queueBind(queue,EXCHANGE_NAME,"");
        System.out.println("wait print message...");

        DeliverCallback deliverCallback = (var,var2)->{
            System.out.println("02:"+new String(var2.getBody(),"UTF-8"));
        };
        channel.basicConsume(queue,true,deliverCallback, var->{});

    }
}

生产者发送 基于下面调试程序改变参数RoutingKey 切换info warn error 可以观察两个生产者的不同数据接收

java 复制代码
package com.esint.rabbitmq.work03;

import com.esint.rabbitmq.RabbitMQUtils;
import com.rabbitmq.client.Channel;

import java.util.Scanner;

public class EmitLog {


    public static final String EXCHANGE_NAME = "logs";

    public static void main(String[] args) throws Exception {

        Channel channel = RabbitMQUtils.getChannel();

        //声明交换机
        channel.exchangeDeclare(EXCHANGE_NAME,"fanout");

        Scanner scanner = new Scanner(System.in);

        while(scanner.hasNext()){
            String mes = scanner.next();
            channel.basicPublish(EXCHANGE_NAME,"",null,mes.getBytes("UTF-8"));
            System.out.println("生产者发出消息:"+mes.toString());
        }
    }
}
相关推荐
Logintern097 小时前
遇到RabbitMQ 的 `channel_max` 限制报错
rabbitmq
ICollection12 小时前
RabbitMQ的安装集群、仲裁队列配置
rabbitmq·集群·银河麒麟
Z_z在努力12 小时前
【rabbitmq】RabbitMQ 全面详解:从核心概念到高级应用
分布式·rabbitmq
漫谈网络1 天前
RabbitMQ核心机制解析
分布式·rabbitmq
ApachePulsar2 天前
Apache Pulsar vs. RabbitMQ:差异与比较
分布式·rabbitmq·apache
Z_z在努力2 天前
【rabbitmq 高级特性】RabbitMQ 延迟队列全面解析
分布式·rabbitmq
sg_knight2 天前
Spring Cloud与RabbitMQ深度集成:从入门到生产级实战
java·spring boot·spring·spring cloud·消息队列·rabbitmq·stream
IT机器猫2 天前
RabbitMQ
java·rabbitmq·java-rabbitmq
熊文豪3 天前
Windows安装RabbitMQ保姆级教程
windows·分布式·rabbitmq·安装rabbitmq
勇往直前plus3 天前
CentOS 7 环境下 RabbitMQ 的部署与 Web 管理界面基本使用指南
前端·docker·centos·rabbitmq