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