关于rabbitMQ的bindingKey和routingKey理解


package utils;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;

public class test {

    public void sendMqMessage() {

        String message = "学生班级和姓名"; // 消息内容
        String queueName="man"; // 队列名字,例如李家队
        String routingKey = "class.sex" ;// 消息的路由键,例如一班.李四
         String bindingKey = "*.李*"; // 队列绑定的接收规则, 列如只收李姓
        //创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost(Constant.MQ_HOST);
        factory.setPort(Constant.MQ_PORT);
        factory.setUsername(Constant.MQ_USER);
        factory.setPassword(Constant.MQ_PWD);
        try {
            //创建连接
            Connection conn = factory.newConnection();
            //创建信道
            Channel channel = conn.createChannel();
            //声明路由
            String exchange = "amq.topic";
            channel.exchangeDeclare(exchange, "topic", true);
            // ----创建队列并设置信息---- start
            //声明队列
            channel.queueDeclare(queueName, true, false, false, null);
            //队列绑定路由
            channel.queueBind(queueName, exchange, bindingKey);
            // ----创建队列并设置信息---- end

            // ----信息推送生产者---- start
            //使用消息确认confirm模式
            channel.confirmSelect();
            //发布消息
            channel.basicPublish(exchange, routingKey, null, message.getBytes());
            // 等待消息确认到达MQ
            if (channel.waitForConfirms()) {
                System.out.println("----send success:" + routingKey);
            }
            // ----信息推送生产者---- end
            //关闭
            channel.close();
            conn.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

Topic交换器按照正则表达式模糊匹配:用消息的Routing Key和Binding Key进行模糊匹配,如果匹配成功,将消息分发到该Queue。Binding Key中可以存在两种特殊字符“ * ”与“#”,用于做模糊匹配,其中“*”用于匹配一个单词,“#”用于匹配零、一个或多个单词;Routing Key中特殊字符没有特殊含义,例如:usa.*中 “*” 只是一个*没有特殊含义,不是正则表达式。
Binding Key与Routing Key是一个句点号 “. ” 分隔的字符串,被句点号“. ”分隔开的每一段独立的字符串称为一个单词

 

 原文链接:https://blog.csdn.net/weixin_43498985/article/details/119026198


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM