From 1fdd85d07cf1ed861e8efaf685674049d6c1284e Mon Sep 17 00:00:00 2001
From: wuyouming666 <2265557248@qq.com>
Date: 星期三, 28 二月 2024 15:53:56 +0800
Subject: [PATCH] 增加mq 根据id 、队列名、消息内容 发送和消费消息方法,
---
UnLoadGlassModule/src/main/java/com/mes/service/ModuleB.java | 7 +
UnLoadGlassModule/src/main/java/com/mes/service/ModuleA.java | 63 ++++----------------
UnLoadGlassModule/src/main/java/com/mes/common/RabbitMQUtils.java | 96 ++++++++++++++++++++++++++++++-
3 files changed, 109 insertions(+), 57 deletions(-)
diff --git a/UnLoadGlassModule/src/main/java/com/mes/common/RabbitMQUtils.java b/UnLoadGlassModule/src/main/java/com/mes/common/RabbitMQUtils.java
index 7c563e8..1da8717 100644
--- a/UnLoadGlassModule/src/main/java/com/mes/common/RabbitMQUtils.java
+++ b/UnLoadGlassModule/src/main/java/com/mes/common/RabbitMQUtils.java
@@ -3,10 +3,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.rabbitmq.client.*;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
@@ -83,7 +80,7 @@
}
-
+//娑堣垂娑堟伅
public List<String> readMessages(String queueName,boolean is) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(host);
@@ -108,6 +105,95 @@
return messages;
}
+
+
+ private static Set<String> sentMessageIds = new HashSet<>();
+//鏍规嵁id鍙戦�佹秷鎭�
+ public static boolean sendMessageWithId(String queueName, String message, String messageId) throws Exception {
+ if (sentMessageIds.contains(messageId)) {
+ System.err.println("Message with ID " + messageId + " has already been sent.");
+ return false; // 娑堟伅閲嶅锛屽彂閫佸け璐�
+ }
+
+ ConnectionFactory factory = new ConnectionFactory();
+ factory.setHost(host);
+
+ try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {
+ channel.queueDeclare(queueName, false, false, false, args);
+
+ AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
+ .messageId(messageId)
+ .build();
+
+ channel.basicPublish("", queueName, properties, message.getBytes("UTF-8"));
+ System.out.println("Sent message with ID: " + messageId);
+
+ sentMessageIds.add(messageId); // 灏� messageId 娣诲姞鍒板凡鍙戦�侀泦鍚堜腑
+
+ return true; // 娑堟伅鎴愬姛鍙戦��
+ } catch (Exception e) {
+ System.err.println("Failed to send message: " + e.getMessage());
+ return false; // 娑堟伅鍙戦�佸け璐�
+ }
+ }
+//鏍规嵁id娑堣垂娑堟伅
+ public static String consumeMessageById( String messageId,String queueName) throws Exception {
+ ConnectionFactory factory = new ConnectionFactory();
+ factory.setHost(host);
+
+ try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {
+ channel.queueDeclare(queueName, false, false, false, args);
+
+ GetResponse response;
+ while ((response = channel.basicGet(queueName, false)) != null) {
+ String receivedMessage = new String(response.getBody(), "UTF-8");
+ if (response.getProps().getMessageId().equals(messageId)) {
+ long deliveryTag = response.getEnvelope().getDeliveryTag();
+ channel.basicAck(deliveryTag, false);
+ System.out.println("Selected message: "+messageId+ receivedMessage);
+ return receivedMessage; // 杩斿洖閫夊畾鐨勬秷鎭唴瀹�
+ } else {
+ // 瀵逛簬涓嶇鍚堟潯浠剁殑娑堟伅锛岃繘琛� Nack 鎿嶄綔
+// long deliveryTag = response.getEnvelope().getDeliveryTag();
+// channel.basicNack(deliveryTag, false, true);
+ return "Specified message not found in the queue.";
+ }
+ }
+
+ return "Specified message not found in the queue.";
+ }
+ }
+
+//娑堣垂鎸囧畾娑堟伅
+ public static String consumeSelectedMessage(int messageToConsume, String queueName) throws Exception {
+ ConnectionFactory factory = new ConnectionFactory();
+ factory.setHost(host);
+
+ try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {
+ channel.queueDeclare(queueName, false, false, false, args);
+
+ for (int i = 0; i < messageToConsume; i++) {
+ GetResponse response = channel.basicGet(queueName, false);
+ if (response == null) {
+ return "Queue does not have enough messages.";
+ }
+// long deliveryTag = response.getEnvelope().getDeliveryTag();
+// channel.basicAck(deliveryTag, false);
+ }
+
+ GetResponse selectedResponse = channel.basicGet(queueName, false);
+ if (selectedResponse != null) {
+ byte[] body = selectedResponse.getBody();
+ String selectedMessage = new String(body, "UTF-8");
+ long deliveryTag = selectedResponse.getEnvelope().getDeliveryTag();
+ channel.basicAck(deliveryTag, false);
+ return selectedMessage;
+ } else {
+ return "Specified message not found in the queue.";
+ }
+ }
+ }
+
// 鍙戦�� JSON 娑堟伅鍒伴槦鍒�
public static boolean sendJsonMessage(Object message, String queueName) throws Exception {
// 鍒涘缓杩炴帴宸ュ巶骞惰缃富鏈哄悕
diff --git a/UnLoadGlassModule/src/main/java/com/mes/service/ModuleA.java b/UnLoadGlassModule/src/main/java/com/mes/service/ModuleA.java
index 5a21355..889bd32 100644
--- a/UnLoadGlassModule/src/main/java/com/mes/service/ModuleA.java
+++ b/UnLoadGlassModule/src/main/java/com/mes/service/ModuleA.java
@@ -1,62 +1,25 @@
package com.mes.service;
-import com.rabbitmq.client.Channel;
-import com.rabbitmq.client.Connection;
-import com.rabbitmq.client.ConnectionFactory;
-
-import java.util.HashMap;
-import java.util.Map;
+import com.mes.common.RabbitMQUtils;
public class ModuleA {
private static String QUEUE_NAME = "hangzhou2";
+ private static RabbitMQUtils receiver;
- public ModuleA(String QUEUENAME){
- QUEUE_NAME=QUEUENAME;
+ public ModuleA(String QUEUENAME) {
+ QUEUE_NAME = QUEUENAME;
+ receiver = new RabbitMQUtils(); // 瀹炰緥鍖� RabbitMQUtils 瀵硅薄
}
+ public static void main(String[] argv) throws Exception {
+// ModuleA moduleA = new ModuleA("hangzhou2"); // 瀹炰緥鍖� ModuleA 瀵硅薄
+// String message = "Your message to send666";
+// String messageId = "5"; // 娑堟伅ID
+// receiver.sendMessageWithId(QUEUE_NAME, message, messageId); // 璋冪敤 sendMessageWithId 鏂规硶鍙戦�佹秷鎭�
+ receiver.sendMessageWithId("hangzhou2", "Hello RabbitMQ!", "1");
+ receiver.sendMessageWithId("hangzhou2", "Another message", "2");
+ receiver.sendMessageWithId("hangzhou2", "Yet another message", "1"); // 杩欐潯娑堟伅浼氭墦鍗伴噸澶嶆秷鎭殑閿欒淇℃伅
- public static void main(String[] argv) throws Exception {
- // 鍒涘缓杩炴帴宸ュ巶
- ConnectionFactory factory = new ConnectionFactory();
- factory.setHost("10.153.19.150");
- //factory.setHost("localhost");
-
- try (Connection connection = factory.newConnection();
- //channel 鏄�氳繃 connection 鍒涘缓鐨勪竴涓� AMQP 淇¢亾瀵硅薄
- Channel channel = connection.createChannel()) {
- // `channel.queueDeclare(QUEUE_NAME, false, false, false, null);` 鏄敤鏉ュ0鏄庝竴涓槦鍒楃殑鏂规硶
- //璇ユ柟娉曟湁浜斾釜鍙傛暟锛�
- //1. `QUEUE_NAME`锛氭寚瀹氶槦鍒楃殑鍚嶇О锛岃繖閲屼娇鐢ㄤ簡涔嬪墠澹版槑鐨勫父閲廯"module_queue"`浣滀负闃熷垪鍚嶇О銆�
- //2. `false`锛氭寚瀹氶槦鍒楁槸鍚︿负鎸佷箙鍖栫殑銆傚湪杩欓噷璁剧疆涓篳false`锛岃〃绀轰笉灏嗛槦鍒楁寔涔呭寲鍒扮鐩橈紝涓�鏃abbitMQ鏈嶅姟鍋滄鎴栧穿婧冿紝闃熷垪灏嗕細涓㈠け銆�
- //3. `false`锛氭寚瀹氭槸鍚﹀彧鍏佽褰撳墠杩炴帴澹版槑姝ら槦鍒椼�傚湪杩欓噷璁剧疆涓篳false`锛岃〃绀哄彲鍏佽鍏朵粬杩炴帴涔熷0鏄庡悓鍚嶇殑闃熷垪銆�
- //4. `false`锛氭寚瀹氭槸鍚﹀湪涓嶅啀浣跨敤鏃惰嚜鍔ㄥ垹闄ら槦鍒椼�傚湪杩欓噷璁剧疆涓篳false`锛岃〃绀哄綋娌℃湁娑堣垂鑰呮垨鑰呮墍鏈夋秷璐硅�呮柇寮�杩炴帴鍚庯紝闃熷垪涓嶄細鑷姩鍒犻櫎銆�
- //5. `null`锛氭寚瀹氬叾浠栭槦鍒楀睘鎬х殑鍙傛暟銆傚湪杩欓噷璁剧疆涓篳null`锛岃〃绀烘病鏈夊叾浠栧睘鎬ч渶瑕佽缃��
- //鎵ц`channel.queueDeclare()`鏂规硶鍚庯紝濡傛灉闃熷垪涓嶅瓨鍦紝灏嗕細鍒涘缓涓�涓柊鐨勯槦鍒楋紝濡傛灉闃熷垪宸茬粡瀛樺湪锛屽垯涓嶅仛浠讳綍鎿嶄綔銆�
- Map<String, Object> args = new HashMap<>();
- args.put("x-max-length-bytes",1024 * 1024);
-// args.put("x-max-length",5000);
- channel.queueDeclare(QUEUE_NAME, false, false, false, args);
-
- String message = "浣�";
-
- for ( int i=1;i< 20000;i++)
- {
- message+="浣�";
-
- }
-
- message+="b";
-
-
-
- // 灏嗘秷鎭彂甯冨埌鎸囧畾鐨勯槦鍒椾腑銆傜┖瀛楃涓�""琛ㄧず榛樿鐨勪氦鎹㈡満锛孮UEUE_NAME鎸囧畾浜嗙洰鏍囬槦鍒楀悕绉帮紝null琛ㄧず娌℃湁鎸囧畾鍏朵粬灞炴�э紝message.getBytes()灏嗘秷鎭唴瀹硅浆鎹负瀛楄妭鏁扮粍杩涜浼犺緭銆�
- channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
- System.out.println(" [x] Sent '" + message + "'");
-
-// DownGlassInfo downGlassInfo = new DownGlassInfo();
-// downGlassInfo.setId(1);
-// System.out.println(" id'" + downGlassInfo.getId() + "'");
- }
}
}
diff --git a/UnLoadGlassModule/src/main/java/com/mes/service/ModuleB.java b/UnLoadGlassModule/src/main/java/com/mes/service/ModuleB.java
index a258779..75c2e16 100644
--- a/UnLoadGlassModule/src/main/java/com/mes/service/ModuleB.java
+++ b/UnLoadGlassModule/src/main/java/com/mes/service/ModuleB.java
@@ -12,8 +12,11 @@
RabbitMQUtils receiver = new RabbitMQUtils();
try {
- String receivedMessage = String.valueOf(receiver.readMessages(QUEUE_NAME,false));
- System.out.println("Received message: " + receivedMessage);
+
+ receiver.consumeMessageById("2",QUEUE_NAME);
+ // String receivedMessage = receiver.consumeSelectedMessage(1,QUEUE_NAME);
+// String receivedMessage = String.valueOf(receiver.readMessages(QUEUE_NAME,false));
+ // System.out.println("Received message: " + receivedMessage);
} catch (Exception e) {
e.printStackTrace();
}
--
Gitblit v1.8.0