之前已经讲了mq的十一种消息的前八种
今天讲十一种消息的最后三种消息,同步消息,异步消息,单向消息。有需要的小伙伴点开主页看一下。
同步消息是指,当生产者发送消息的时候,需要阻塞等待服务端响应消息存储的结果
同步消息跟前面提到的消息类型并不是互斥的
比如前面说的普通消息时举的例子,他就是同步发送的,那么它也是一个同步消息
这种模式用于对数据一致性要求较高的场景中,但是等待也会消耗一定的时间
既然有了同步消息,那么相对应的就有异步消息
异步消息就是指生产者发送消息后,不需要阻塞等待服务端存储消息的结果
所以异步消息的好处就是可以减少等待响应过程消耗的时间
如果你想知道有没有发送成功,可以在发送消息的时候传个回调的接口SendCallback
的实现
Message?message?=?new?Message("sanyouTopic",?"三友的java日记".getBytes());
//异步发送消息
producer.send(message,?new?SendCallback()?{
????????????@Override
????????????public?void?onSuccess(SendResult?sendResult)?{
????????????????System.out.println("消息发送结果?=?"?+?sendResult);
????????????}
????????????@Override
????????????public?void?onException(Throwable?e)?{
????????????????System.out.println("消息发送异常?=?"?+?e.getMessage());
????????????}
????????}
);
当消息发送之后收到发送结果或者出现异常的时候,RocektMQ就会回调这个SendCallback
实现类,你就可以知道消息发送的结果了
所谓的单向消息就是指,生产者发送消息给服务端之后,就直接不管了
所以对于生产者来说,他是不会去care消息发送的结果了,即使发送失败了,对于生产者来说也是无所谓的
所以这种方式的主要应用于那种能够忍受丢消息的操作场景
比如像日志收集就比较适合使用这种方式
单向消息的发送是通过sendOneway
来调用的
Message?message?=?new?Message("sanyouTopic",?"三友的java日记".getBytes());
//发送单向消息
producer.sendOneway(message);
总的来说,同步消息、异步消息、单向消息代表的是消息的发送方式,主要是针对消息的发送方来说,对消息的存储之类是的没有任何影响的
总的来说,RocketMQ提供了丰富多样的消息类型以满足不同的业务需求和场景。从基础的普通消息到高效的批量消息,从保证顺序的顺序消息到处理延迟需求的延迟消息,再到处理分布式事务的事务消息,RocketMQ都提供了强大的支持。此外,它还涵盖了请求应答、重试、死信、同步异步以及单向消息等高级功能,确保了消息传递的可靠性和灵活性。通过选择和组合使用这些消息类型,开发者能够构建出高效、健壮的消息驱动系统,以适应各种复杂的企业级应用场景。
以下是一些主要的消息类型及其简要说明:
普通消息(Normal Message):最基本的消息类型,发送后会被消费者接收并处理。
批量消息(Batch Message):将多个消息集合在一起发送,以减少网络通信的次数,提高效率。但需要注意的是,批量数据大小不能超过限制。
顺序消息(Sequential Message):保证在同一主题下的消息按照发送顺序进行消费,适用于需要保持消息顺序的业务场景。
延迟消息(Delay Message):消息发送后不会立即被消费,而是等待指定的时间后再变为可消费状态。
事务消息(Transaction Message):用于处理分布式事务,确保事务的最终一致性。包括预提交、提交和回滚等操作。
请求应答消息(Request-Reply Message):实现生产者和消费者之间的请求-响应模式,消费者处理完消息后会返回响应给生产者。
重试消息(Retry Message):对于消费失败的消息,系统会自动进行重试,直到消费成功或者达到最大重试次数。
死信消息(Dead Letter Message):当消息无法正常消费或者重试达到一定次数后,会被视为死信,通常会被转移到特定的死信队列中进行处理。
同步消息(Sync Message):发送方发出数据后,会在收到接收方的确认回复后才认为消息发送成功。
异步消息(Async Message):发送方发出数据后,不需要等待接收方的确认回复,但在后台会有机制确保消息的可靠投递。
单向消息(One-Way Message):发送方只负责发送消息,不关心消息是否被接收和处理,常用于日志记录、监控报警等场景。
这些消息类型涵盖了多种不同的应用场景和需求,可以根据具体的业务需求选择合适的消息类型来实现高效、可靠的通信。
关于文章中大家有任何疑问可以通过关注公众号《编程乐学》进行留言,同时,公众号还有更多有趣的项目以及关于学习编程的笔记资料大家可以看看,欢迎大家进行留言。