• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Y-wee
博客园    首页    新随笔    联系   管理     

rabbitmq路由模式

rabbitmq路由模式

跟发布订阅模式的无意识广播不一样,路由模式可以实现指定路由的匹配,对应的交换机类型为direct

代码实现

消费者A

package com.yl.route;

import com.rabbitmq.client.*;
import com.yl.util.RabbitConstant;
import com.yl.util.RabbitUtils;

import java.io.IOException;

/**
 * 消费者A
 *
 * @author Y-wee
 */
public class RouteConsumerA {

    public static void main(String[] args) throws IOException {
        Connection connection = RabbitUtils.getConnection();
        Channel channel = connection.createChannel();
        channel.exchangeDeclare(RabbitConstant.EXCHANGE_ROUTE, BuiltinExchangeType.DIRECT);
        channel.queueDeclare(RabbitConstant.QUEUE_ROUTE_A,false,false,false,null);
        channel.queueBind(RabbitConstant.QUEUE_ROUTE_A, RabbitConstant.EXCHANGE_ROUTE,"key1");
        channel.queueBind(RabbitConstant.QUEUE_ROUTE_A, RabbitConstant.EXCHANGE_ROUTE,"key2");

        DeliverCallback deliverCallback = (consumerTag, message) -> {
            System.out.println("ConsumerA接收到消息:"+new String(message.getBody()));
            channel.basicAck(message.getEnvelope().getDeliveryTag(),false);
        };

        CancelCallback cancelCallback = (consumerTag) -> {
            System.out.println("消费失败");
        };

        channel.basicConsume(RabbitConstant.QUEUE_ROUTE_A, false, deliverCallback, cancelCallback);
    }

}

RabbitUtils是笔者自定义的一个工具类,用来获取连接

RabbitConstant是笔者自定义的一个常量类,里面存储了队列名和交换机名

消费者B

package com.yl.route;

import com.rabbitmq.client.*;
import com.yl.util.RabbitConstant;
import com.yl.util.RabbitUtils;

import java.io.IOException;

/**
 * 消费者B
 *
 * @author Y-wee
 */
public class RouteConsumerB {

    public static void main(String[] args) throws IOException {
        Connection connection = RabbitUtils.getConnection();
        Channel channel = connection.createChannel();
        channel.exchangeDeclare(RabbitConstant.EXCHANGE_ROUTE, BuiltinExchangeType.DIRECT);
        channel.queueDeclare(RabbitConstant.QUEUE_ROUTE_B,false,false,false,null);
        channel.queueBind(RabbitConstant.QUEUE_ROUTE_B, RabbitConstant.EXCHANGE_ROUTE,"key3");

        DeliverCallback deliverCallback = (consumerTag, message) -> {
            System.out.println("ConsumerB接收到消息:"+new String(message.getBody()));
            channel.basicAck(message.getEnvelope().getDeliveryTag(),false);
        };

        CancelCallback cancelCallback = (consumerTag) -> {
            System.out.println("消费失败");
        };

        channel.basicConsume(RabbitConstant.QUEUE_ROUTE_B, false, deliverCallback, cancelCallback);
    }

}

生产者

package com.yl.route;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.yl.util.RabbitConstant;
import com.yl.util.RabbitUtils;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * 生产者
 *
 * @author Y-wee
 */
public class RouteProvider {

    public static void main(String[] args) throws IOException {
        Map<String, String> map = new HashMap<>();
        map.put("key1","value1");
        map.put("key2","value2");
        map.put("key3","value3");

        Connection connection = RabbitUtils.getConnection();
        Channel channel = connection.createChannel();

        for(String key:map.keySet()){
            channel.basicPublish(RabbitConstant.EXCHANGE_ROUTE,key,null,map.get(key).getBytes());
        }

        System.out.println("消息发送完毕");
    }

}

控制台打印结果

RouteConsumerA

ConsumerA接收到消息:value1
ConsumerA接收到消息:value2

RouteConsumerB

ConsumerB接收到消息:value3
记得快乐
posted @ 2021-12-26 20:37  Y-wee  阅读(136)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3