创建基础消息体,开始针对消息类通讯整合

This commit is contained in:
Dftre 2024-10-06 21:02:09 +08:00
parent 2c412b32a7
commit ac40c0f92f
3 changed files with 186 additions and 29 deletions

View File

@ -0,0 +1,172 @@
package com.ruoyi.common.core.domain;
import java.time.Instant;
import java.util.Map;
import java.util.UUID;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
public class Message {
/** 消息唯一标识符 */
private String messageId;
/** 发送者标识 */
private String sender;
/** 接收者标识 */
private String receiver;
/** 消息时间戳 */
private Instant timestamp;
/** 消息类型(如命令、聊天、日志、事件等) */
private String type;
/** 消息主题或事件名称 */
private String subject;
/** 消息数据负载 */
private Map<String, Object> payload;
/** 元数据,用于存储额外的信息 */
private Map<String, Object> metadata;
/** 消息状态(如成功、失败、重试等) */
private String status;
/** 重试次数 */
private int retryCount;
/** 最大重试次数 */
private int maxRetries;
/** 重试间隔 */
private String retryInterval;
// 构造函数
public Message() {
this.messageId = UUID.randomUUID().toString();
this.timestamp = Instant.now();
}
public static Message create() {
return new Message();
}
public String getMessageId() {
return messageId;
}
public Message setMessageId(String messageId) {
this.messageId = messageId;
return this;
}
public String getSender() {
return sender;
}
public Message setSender(String sender) {
this.sender = sender;
return this;
}
public String getReceiver() {
return receiver;
}
public Message setReceiver(String receiver) {
this.receiver = receiver;
return this;
}
public Instant getTimestamp() {
return timestamp;
}
public Message setTimestamp(Instant timestamp) {
this.timestamp = timestamp;
return this;
}
public String getType() {
return type;
}
public Message setType(String type) {
this.type = type;
return this;
}
public String getSubject() {
return subject;
}
public Message setSubject(String subject) {
this.subject = subject;
return this;
}
public Map<String, Object> getPayload() {
return payload;
}
public Message setPayload(Map<String, Object> payload) {
this.payload = payload;
return this;
}
public Map<String, Object> getMetadata() {
return metadata;
}
public Message setMetadata(Map<String, Object> metadata) {
this.metadata = metadata;
return this;
}
public String getStatus() {
return status;
}
public Message setStatus(String status) {
this.status = status;
return this;
}
public int getRetryCount() {
return retryCount;
}
public Message setRetryCount(int retryCount) {
this.retryCount = retryCount;
return this;
}
public int getMaxRetries() {
return maxRetries;
}
public Message setMaxRetries(int maxRetries) {
this.maxRetries = maxRetries;
return this;
}
public String getRetryInterval() {
return retryInterval;
}
public Message setRetryInterval(String retryInterval) {
this.retryInterval = retryInterval;
return this;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("messageId", getMessageId())
.append("sender", getSender())
.append("receiver", getReceiver())
.append("timestamp", getTimestamp())
.append("type", getType())
.append("subject", getSubject())
.append("payload", getPayload())
.append("metadata", getMetadata())
.append("status", getStatus())
.append("retryCount", getRetryCount())
.append("maxRetries", getMaxRetries())
.append("retryInterval", getRetryInterval())
.toString();
}
}

View File

@ -1,28 +1,17 @@
package com.ruoyi.middleware.rabbitmq;
import java.util.Map;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import com.ruoyi.common.core.domain.Message;
@Component
@RabbitListener(queues = "TestDirectQueue") // 监听的队列名称 TestDirectQueue
public class DirectReceiver {
@RabbitHandler
public void process(Map map) {
public void process(Message map) {
System.out.println("DirectReceiver m消费者收到消息 : " + map.toString());
}
@RabbitHandler
public void process(String map) {
System.out.println("DirectReceiver s消费者收到消息 : " + map.toString());
}
@RabbitHandler
public void process(Byte[] b) {
System.out.println("DirectReceiver s消费者收到消息 : " + b.toString());
}
}

View File

@ -1,10 +1,6 @@
package com.ruoyi.middleware.rabbitmq;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
@ -13,6 +9,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.domain.Message;
/**
* @Author : JCccc
@ -24,22 +21,21 @@ import com.ruoyi.common.annotation.Anonymous;
public class SendMessageController {
@Autowired
RabbitTemplate rabbitTemplate; //使用RabbitTemplate,这提供了接收/发送等等方法
RabbitTemplate rabbitTemplate; // 使用RabbitTemplate,这提供了接收/发送等等方法
@GetMapping("/sendDirectMessage")
@Anonymous
public String sendDirectMessage() {
String messageId = String.valueOf(UUID.randomUUID());
String messageData = "test message, hello!";
String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
Map<String,Object> map=new HashMap<>();
map.put("messageId",messageId);
map.put("messageData",messageData);
map.put("createTime",createTime);
//将消息携带绑定键值TestDirectRouting 发送到交换机TestDirectExchange
rabbitTemplate.convertAndSend("TestDirectExchange", "TestDirectRouting", map);
// 将消息携带绑定键值TestDirectRouting 发送到交换机TestDirectExchange
rabbitTemplate.convertAndSend(
"TestDirectExchange",
"TestDirectRouting",
Message.create()
.setPayload(Map.of("message", "你好"))
.setReceiver("接收者")
.setSender("发送者")
);
return "ok";
}
}