RocketMQ 发送消息疑问

我们都知道 rocketmq 发送消息有 3 中方式:
1、同步
     同步发送消息,是可以拿到消息结果的,
  
 2、oneway 方式
     这种方式最适合发送日志啦,比如,最求速度的。可以采取这种方式。

3、异步
     这种方式有点误解了,其实这个也是返回结果的。
     这里写图片描述
     这里写图片描述
     可以从第二种截图中看出,这里需要实现回调接口的。

其实呢,不管是同步,还是异步,broker 都会 response 相关的信息回来的。只是异步需要实现接口而已罢了。
下面的代码我 copy ons 上面的代码的:
public static void main(String[] args) {
Properties properties = new Properties();
properties.put(PropertyKeyConst.AccessKey, “DEMO_AK”);// AccessKey 阿里云身份验证,在阿里云服务器管理控制台创建
properties.put(PropertyKeyConst.SecretKey, “DEMO_SK”);// SecretKey 阿里云身份验证,在阿里云服务器管理控制台创建
properties.put(PropertyKeyConst.ProducerId, “DEMO_PID”);//您在控制台创建的Producer ID
properties.setProperty(PropertyKeyConst.SendMsgTimeoutMillis, “3000”);//设置发送超时时间,单位毫秒
Producer producer = ONSFactory.createProducer(properties);
// 在发送消息前,必须调用start方法来启动Producer,只需调用一次即可。
producer.start();
Message msg = new Message(
// Message Topic
“TopicTestMQ”,
// Message Tag,可理解为Gmail中的标签,对消息进行再归类,方便Consumer指定过滤条件在MQ服务器过滤
“TagA”,
// Message Body,任何二进制形式的数据,MQ不做任何干预,需要Producer与Consumer协商好一致的序列化和反序列化方式
“Hello MQ”.getBytes());
// 设置代表消息的业务关键属性,请尽可能全局唯一。以方便您在无法正常收到消息情况下,可通过MQ控制台查询消息并补发。
// 注意:不设置也不会影响消息正常收发
msg.setKey(“ORDERID_100”);
// 异步发送消息, 发送结果通过callback返回给客户端。
producer.sendAsync(msg, new SendCallback() {
@Override
public void onSuccess(final SendResult sendResult) {
// 消费发送成功
System.out.println(“send message success. topic=” + sendResult.getTopic() + “, msgId=” + sendResult.getMessageId());
}
@Override
public void onException(OnExceptionContext context) {
// 消息发送失败
System.out.println(“send message failed. topic=” + context.getTopic() + “, msgId=” + context.getMessageId());
}
});
// 在callback返回之前即可取得msgId。
System.out.println(“send message async. topic=” + msg.getTopic() + “, msgId=” + msg.getMsgID());
    没
应用退出前,销毁Producer对象。注意:如果不销毁也
有问题
    producer.shutdown();

    rocketmq 发送 异步消息和 ons 差不多的啦,在此不再举例子啦

RocketMQ发送消息的主要步骤如下: 1. 验证消息:在发送消息之前,会对消息进行验证,包括检查消息的合法性和完整性等方面。 2. 查找路由:RocketMQ会根据消息的主题(topic)来查找路由信息,确定消息应该发送到哪个消息队列。 3. 消息发送:根据路由信息,将消息发送到相应的消息队列。RocketMQ提供了三种发送方式: - 同步发送:使用DefaultMQProducer的send方法进行同步发送,会等待消息发送完成并返回发送结果。 - 异步发送:使用DefaultMQProducer的send方法进行异步发送,可以设置回调函数,在消息发送完成后执行回调函数。 - 单向发送:使用DefaultMQProducer的sendOneway方法进行单向发送,不关心发送结果,不等待响应。 在RocketMQ的topic创建机制中,一个topic对应有多个消息队列。在发送消息时,RocketMQ会根据消息的主题(topic)来选择一个消息队列进行发送。选择消息队列的算法可以是根据消息的key进行哈希计算,或者使用轮询的方式等。 如果在发送消息时遇到了故障的broker,RocketMQ会通过以下方式规避故障: 1. 客户端会定期从NameServer获取最新的broker列表,如果发现有broker宕机,会将宕机的broker从列表中移除。 2. 如果发送消息时选择的消息队列所在的broker宕机了,RocketMQ会尝试选择另一个可用的broker进行消息发送。 3. 如果所有的broker都宕机了,RocketMQ会等待一段时间后重新尝试发送消息,直到有可用的broker为止。 综上所述,RocketMQ发送消息的流程包括验证消息、查找路由和消息发送,而在选择消息队列时会根据消息的主题进行选择。在遇到故障broker时,RocketMQ会通过更新broker列表和选择可用的broker来规避故障。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值