RocketMQTemplate 重要方法详解

目录

重点方法分析和使用示例

1. syncSend-同步发送

2. asyncSend-异步发送

3. sendOneWay-单向发送

4. syncSendOrderly-同步顺序发送

5. asyncSendOrderly-异步顺序发送

6. sendOneWayOrderly-单向排序发送

7. sendAndReceive-请求响应模式

8. 其他重载方法


重要方法分析和使用

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. 其他重载方法
  1. 带超时时间的 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);
  1. 带回调函数的 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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值