MQ发送普通消息(三种方式)

本文详细介绍了MQ的三种消息发送方式:可靠同步发送、可靠异步发送和单向(Oneway)发送。同步发送适用于需要立即确认的场景,如重要通知;异步发送适合于对RT敏感的业务,如视频转码;单向发送则用于对可靠性要求不高的快速操作,如日志收集。文章提供了相应的代码示例。
摘要由CSDN通过智能技术生成

MQ 发送普通消息有三种实现方式:可靠同步发送、可靠异步发送、单向(Oneway)发送。本文介绍了每种实现的原理、使用场景以及三种实现的异同,同时提供了代码示例以供参考。

  • 可靠同步发送

    原理:同步发送是指消息发送方发出数据后,会在收到接收方发回响应之后才发下一个数据包的通讯方式。sync-send

应用场景:此种方式应用场景非常广泛,例如重要通知邮件、报名短信通知、营销短信系统等。

  • 可靠异步发送

    原理:异步发送是指发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。MQ 的异步发送,需要用户实现异步发送回调接口(SendCallback),在执行消息的异步发送时,应用不需要等待服务器响应即可直接返回,通过回调接口接收服务器响应,并对服务器的响应结果进行处理。

    async_send

    应用场景:异步发送一般用于链路耗时较长,对 RT 响应时间较为敏感的业务场景,例如用户视频上传后通知启动转码服务,转码完成后通知推送转码结果等。

  • 单向(Oneway)发送

    原理:单向(Oneway)发送特点为只负责发送消息,不等待服务器回应且没有回调函数触发,即只发送请求不等待应答。此方式发送消息的过程耗时非常短,一般在微秒级别。

    oneway

    应用场景:适用于某些耗时非常短,但对可靠性要求并不高的场景,例如日志收集。

下表概括了三者的特点和主要区别。

发送方式 发送 TPS 发送结果反馈 可靠性
同步发送 不丢失
异步发送 不丢失
单向发送 最快 可能丢失
示例代码

同步发送

 
 
 
  1. public class ProducerTest {
  2. public static void main(String[] args) {
  3. Properties properties = new Properties();
  4. properties.put(PropertyKeyConst.ProducerId, "XXX");//您在控制台创建的Producer ID
  5. properties.put(PropertyKeyConst.AccessKey,"XXX");// AccessKey 阿里云身份验证,在阿里云服务器管理控制台创建
  6. properties.put(PropertyKeyConst.SecretKey, "XXX");// SecretKey 阿里云身份验证,在阿里云服务器管理控制台创建
  7. properties.setProperty(PropertyKeyConst.SendMsgTimeoutMillis, "3000");//设置发送超时时间,单位毫秒
  8. //PropertyKeyConst.ONSAddr地址请根据实际情况对应以下几类进行输入:
  9. //公共云生产环境:http://onsaddr-internal.aliyun.com:8080/rocketmq/nsaddr4client-internal
  10. //公共云公测环境:http://onsaddr-internet.aliyun.com/rocketmq/nsaddr4client-internet
  11. //杭州金融云环境:http://jbponsaddr-internal.aliyun.com:8080/rocketmq/nsaddr4client-internal
  12. //杭州深圳云环境:http://mq4finance-sz.addr.aliyun.com:8080/rocketmq/nsaddr4client-internal
  13. //亚太东南1公共云环境(只适用于新加坡ECS):http://ap-southeastaddr-internal.aliyun.com:8080/rocketmq/nsaddr4client-internal
  14. properties.put(PropertyKeyConst.ONSAddr,
  15. "http://onsaddr-internal.aliyun.com:8080/rocketmq/nsaddr4client-internal"
发送普通消息队列(MQ消息在某些情况下可能会有一些缺点,具体取决于你的使用场景和需求。以下是一些可能的缺点: 1. 可靠性:普通MQ消息通常是异步的,发送者不会等待接收者处理消息的确认。这意味着如果消息在传输过程中丢失或发送失败,发送者可能无法得知。如果你的应用程序对消息的可靠性要求很高,这可能会导致数据丢失或处理延迟。 2. 顺序性:普通MQ消息通常不保证发送顺序和接收顺序一致。如果你的应用程序对消息的顺序性有要求,可能需要额外的逻辑来确保消息按照期望的顺序进行处理。 3. 处理速度:普通MQ消息通常以较低的延迟发送和接收,但速度可能受到网络状况和MQ系统的限制。如果你的应用程序对实时性要求较高,可能需要考虑其他机制来满足这个需求。 4. 可维护性:使用普通MQ消息传递时,需要确保发送者和接收者都正确处理消息,并保持一致的消息格式和协议。这可能需要额外的开发和维护工作,以确保系统的稳定性和可维护性。 综上所述,发送普通MQ消息可能会有一些缺点,但在许多场景下仍然是一种常见且有效的方式。如果你的应用程序对可靠性、顺序性和实时性有更高的要求,可能需要考虑其他消息传递机制或MQ系统的特性(例如,使用有序消息、事务性消息或持久化消息等)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值