7
回答
JMS,接收端如果要多线程处理消息,怎么实现?
注册华为云得mate10,2.9折抢先购!>>>   

我的目的就是:

    “使用多个接收者接收同一队列里的消息,达到多线程快速处理消息的目的”

我想到的方法,在接收端如果收到一个消息,就开一个thread去处理

还有其它方法实现吗?jms或activemq本身提供了吗

<无标签>
举报
jack_jones
发帖于4年前 7回/2K+阅
共有7个答案 最后回答: 4年前

取消息可以用几个线程并发获取,获取出来的每个消息再放给线程池或者再起线程处理。

保证读取消息和消息处理分离

如果高并发下来一个消息就开一个线程来处理会处理不过来的,最好开一个线程专门接收消息,接收后的消息不要做任何处理直接存到Java队列里缓存起来,然后可以一个线程池的多个线程从该队列里抓取消息再处理,这样可能好些。当然用AMQ也不错。

如果你是P2P模式的,那就考虑通过多线程的方式来做,如果有顺序就保证好顺序就可以了,楼上的方法可以,写个缓冲队列多线程去取就可以了,如果是sub/pub模式的,那本身就可以做到分布式处理,但问题还是要根据不同的业务场景来看的。

另外还可以在发送的时候,可以将消息按不用的partition分开发送,这样按不同的partition收,就可以做并行处理了。

你监听到一个消息,new thread去处理,那么对于jms来说,还是一个线程在处理队列中的消息(如果部署在一个jvm中)。只是new thread可以提高性能,建议将new thread改成一个线程池去处理。

MQ不知道,weblogic server jms 结合spring是可以配置多个消费者监听的。

顶部