java 消息消费者_聊聊mq中消息消费的几种方式

mq系列文章

对mq了解不是很多的,可以看一下下面两篇文章:

聊聊消息消费的几种方式

如何确保消息至少消费一次

如何保证消息消费的幂等性

本章内容

从消费者的角度出发,分析一下消息消费的两种方式:

push方式

pull方式

push方式

消息消费的过程:

mq接收到消息

mq主动将消息推送给消费者(消费者需提供一个消费接口)

mq属于主动方,消费者属于一种被动消费,一旦有消息到达mq,会触发mq推送机制,将消息推送给消费者,不管消费者处于何种状态。

优点:

消费者代码较少:对于消费者来说,只需提供一个消费接口给mq即可;mq将接收到的消息,随即推送到指定的消费接口

消息实时性比较高:对于消费者来说,消息一旦到达mq,mq会立即推送给消费者

缺点:

1.消费者属于被动方,消息量比较大时,对消费者性能要求比较高;若消费者机器资源有限,可能会导致压力过载,引发宕机的情况。

2.对消费者可用性要求比较高:当消费者不可用时,会导致很push失败,在mq方需要考虑至少推送成功一次,这块的设计下章节会做说明。

pull方式

消息消费的过程:

1.消费端采用轮询的方式,从mq服务中拉取消息进行消费

2.消费完成通知mq删除已消费成功的消息

3.继续拉取消息消费

对于消费者来说,是主动方,可以采用线程池的方式,根据机器的性能来增加或缩小线程池的大小,控制拉取消息的速度,可以很好的控制自身的压力。

优点:

1.消费者可以根据自己的性能主动控制消息拉去的速度,控制自己的压力,不至于把自己弄跨

2.实时性相对于push方式会低一些

3.消费者属于主动方,控制权更大一些

缺点:

1.消费方需要实现消息拉取的代码

2.消费速度较慢时,可能导致mq中消息积压,消息消费延迟等

总结

消费者性能较好,对实时性要求比较高的,可以采用push的方式

消费者性能有限,建议采用pull的方式

整体上来说,主要在于消费者的性能,机器的性能如果没有问题,push和pull都是可以的

大家有什么看法,可以留言一起讨论,希望本文对你有所帮助

可以关注公众号:路人甲Java,获取年薪50万课程,获取最新文章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您想了解如何使用Java的onMessage监听IBM MQ消息队列,是吗? 首先,您需要确保您已经安装了IBM MQ客户端,并且您已经设置了必要的连接参数和队列管理器名称。 接下来,您可以使用Java的JMS(Java Message Service)API来编写消息监听器。以下是一个简单的示例代码: ```java import javax.jms.*; import com.ibm.mq.jms.MQConnectionFactory; import com.ibm.mq.jms.MQQueueConnectionFactory; public class MQListener implements MessageListener { public static void main(String[] args) throws Exception { MQConnectionFactory factory = new MQQueueConnectionFactory(); factory.setHostName("localhost"); factory.setPort(1414); factory.setChannel("myChannel"); factory.setQueueManager("myQueueManager"); Connection connection = factory.createConnection(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Queue queue = session.createQueue("myQueue"); MessageConsumer consumer = session.createConsumer(queue); consumer.setMessageListener(new MQListener()); connection.start(); System.out.println("Listening for messages..."); } public void onMessage(Message message) { try { System.out.println("Received message: " + message.getBody(String.class)); } catch (JMSException e) { e.printStackTrace(); } } } ``` 在这个例子,我们创建了一个MQListener类,实现了MessageListener接口。我们使用MQConnectionFactory创建了一个连接,并指定了连接参数。然后,我们创建了一个会话、一个队列和一个消息消费者。最后,我们将MessageListener添加到消息消费者,并启动连接。 当有新的消息到达队列时,onMessage方法会被调用,并且我们可以在方法处理该消息。 请注意,上述示例仅适用于IBM MQ。如果您要使用其他消息队列,您需要使用相应的JMS API和连接工厂。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值