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