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());
        }
    }
}
相关推荐
独自破碎E1 天前
RabbitMQ中的Prefetch参数
分布式·rabbitmq
爱琴孩1 天前
RabbitMQ 消息消费模式深度解析
rabbitmq·消息重复消费
利刃大大1 天前
【RabbitMQ】Simple模式 && 工作队列 && 发布/订阅模式 && 路由模式 && 通配符模式 && RPC模式 && 发布确认机制
rpc·消息队列·rabbitmq·队列
J_liaty2 天前
RabbitMQ面试题终极指南
开发语言·后端·面试·rabbitmq
maozexijr2 天前
RabbitMQ Exchange Headers类型存在的意义?
分布式·rabbitmq
独自破碎E2 天前
RabbitMQ的消息确认机制是怎么工作的?
分布式·rabbitmq
maozexijr2 天前
注解实现rabbitmq消费者和生产者
分布式·rabbitmq
Java 码农3 天前
RabbitMQ集群部署方案及配置指南09
分布式·rabbitmq
论迹3 天前
RabbitMQ
分布式·rabbitmq
Java 码农3 天前
RabbitMQ集群部署方案及配置指南08--电商业务延迟队列定制化方案
大数据·分布式·rabbitmq