目录
重要方法分析和使用
1. syncSend-同步发送
同步发送消息,等待发送结果返回。
- 方法签名:
public SendResult syncSend(String destination, Object payload)
- 参数:
- destination:消息的目标地址(Topic)。
- payload:消息体,可以是任意对象。
- 返回值:SendResult,包含发送结果的信息。
- 示例:
SendResult result = rocketMQTemplate.syncSend("TestTopic", "Hello RocketMQ");
System.out.println(result);
2. asyncSend-异步发送
异步发送消息,通过回调处理发送结果。
- 方法签名:
public void asyncSend(String destination, Object payload, SendCallback sendCallback)
- 参数:
- destination:消息的目标地址(Topic)。
- payload:消息体。
- sendCallback:回调函数,处理发送结果。
- 示例:
rocketMQTemplate.asyncSend("TestTopic", "Hello RocketMQ", new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.println("Message sent successfully: " + sendResult);
}
@Override
public void onException(Throwable e) {
System.err.println("Message sending failed: " + e.getMessage());
}
});
3. sendOneWay-单向发送
单向发送消息,不等待发送结果返回。
- 方法签名:
public void sendOneWay(String destination, Object payload)
- 参数:
- destination:消息的目标地址(Topic)。
- payload:消息体。
- 示例:
rocketMQTemplate.sendOneWay("TestTopic", "Hello RocketMQ");
4. syncSendOrderly-同步顺序发送
同步发送顺序消息,确保消息按顺序发送到同一队列。
- 方法签名:
public SendResult syncSendOrderly(String destination, Object payload, String hashKey)
- 参数:
- destination:消息的目标地址(Topic)。
- payload:消息体。
- hashKey:用于消息分区的哈希键,相同的哈希键保证消息进入同一队列。
- 返回值:SendResult,包含发送结果的信息。
- 示例:
SendResult result = rocketMQTemplate.syncSendOrderly("TestTopic", "Orderly Message", "OrderID123");
System.out.println(result);
5. asyncSendOrderly-异步顺序发送
异步发送顺序消息,通过回调处理发送结果。
- 方法签名:
public void asyncSendOrderly(String destination, Object payload, String hashKey, SendCallback sendCallback)
- 参数:
- destination:消息的目标地址(Topic)。
- payload:消息体。
- hashKey:用于消息分区的哈希键。
- sendCallback:回调函数,处理发送结果。
- 示例:
rocketMQTemplate.asyncSendOrderly("TestTopic", "Orderly Message", "OrderID123", new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.println("Message sent successfully: " + sendResult);
}
@Override
public void onException(Throwable e) {
System.err.println("Message sending failed: " + e.getMessage());
}
});
6. sendOneWayOrderly-单向排序发送
单向发送顺序消息,不等待发送结果返回。
- 方法签名:
public void sendOneWayOrderly(String destination, Object payload, String hashKey)
- 参数:
- destination:消息的目标地址(Topic)。
- payload:消息体。
- hashKey:用于消息分区的哈希键。
- 示例:
rocketMQTemplate.sendOneWayOrderly("TestTopic", "Orderly Message", "OrderID123");
7. sendAndReceive-请求响应模式
发送请求并等待响应消息,这种方式适用于需要请求-响应模式的场景。
- 方法签名:
public <T> T sendAndReceive(String destination, Object request, Class<T> responseType)
- 参数:
- destination:消息的目标地址(Topic)。
- request:请求消息体,可以是任意对象。
- responseType:响应消息的类型。
- 返回值:响应消息的对象,类型为 T。
- 示例:
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class RequestResponseService {
@Autowired
private RocketMQTemplate rocketMQTemplate;
public void sendRequestAndReceiveResponse() {
String destination = "RequestTopic";
String requestMessage = "Hello RocketMQ, can you respond?";
// 发送请求并接收响应
String response = rocketMQTemplate.sendAndReceive(destination, requestMessage, String.class);
// 打印响应消息
System.out.println("Received response: " + response);
}
}
8. 其他重载方法
- 带超时时间的 sendAndReceive:
public <T> T sendAndReceive(String destination, Object request, Class<T> responseType, long timeout)
- 参数:
- destination:消息的目标地址(Topic)。
- timeout:等待响应的超时时间,单位为毫秒。
- responseType:响应消息的类型。
- request:请求消息体。
- 示例:
String response = rocketMQTemplate.sendAndReceive("RequestTopic", "Hello RocketMQ", String.class, 3000);
System.out.println("Received response: " + response);
- 带回调函数的 sendAndReceive:
public <T> T sendAndReceive(String destination, Object request, Class<T> responseType, RocketMQLocalTransactionListener listener)
- 参数:
- destination:消息的目标地址(Topic)。
- listener:本地事务监听器,用于处理事务消息的回调。
- responseType:响应消息的类型。
- request:请求消息体。
- 示例:
// 自定义事务监听器
RocketMQLocalTransactionListener listener = new RocketMQLocalTransactionListener() {
@Override
public RocketMQLocalTransactionState executeLocalTransaction(Message msg, Object arg) {
// 执行本地事务逻辑
return RocketMQLocalTransactionState.COMMIT;
}
@Override
public RocketMQLocalTransactionState checkLocalTransaction(Message msg) {
// 检查本地事务状态
return RocketMQLocalTransactionState.COMMIT;
}
};
String response = rocketMQTemplate.sendAndReceive("RequestTopic", "Hello RocketMQ", String.class, listener);
System.out.println("Received response: " + response);