标签: jms

有效的JMS处理

我们有一个JMS队列,它接收大量的消息.

监听器必须使用数据库事务在数据库中保存消息,然后提交JMS事务.

那么我怎么能更有效地做到这一点,我不必在每条消息上做数据库和JMS提交.

database transactions jms

12
推荐指数
2
解决办法
6105
查看次数

12
推荐指数
2
解决办法
8988
查看次数

如何接收convertAndSend发送的内容?

我正在阅读Spring Framework参考,关于JMS集成的章节.有一些示例用于发送文本消息并异步接收它们(由侦听器).并且还有一个将给定对象转换为消息的JmsTemplate函数示例convertAndSend.参考文献说:

通过使用转换器,您和您的应用程序代码可以专注于通过JMS发送或接收的业务对象,而不关心它如何表示为JMS消息的详细信息.

但没有接收此类消息的示例.他们提到功能,receiveAndConvert但不幸的是,它同步接收.
那我怎么异步接收呢?我必须知道,当我convertAndSenda Map,结果消息将是a MapMessage,并且只是检查我的监听器中是否有这种类型的消息并处理它?但是他们承诺我不会关心它如何被表示为JMS消息的细节.
那么还有更好的方法吗?

java spring jms

11
推荐指数
2
解决办法
1万
查看次数

为什么选择JMS进行异步解决方案?为什么它比简单的实体bean更好?

在我参与的大多数项目中,异步解决方案的选择已成为众多讨论的源泉......

每次单个实体bean足以管理队列时:我们只是在表中存储消息(票证),处理cron将队列取消堆栈.这个简单的解决方案具有非常简单的优点,它基于数据库的事务上下文,我们可以在执行期间管理接收消息的状态.

因此,我提出以下问题:

1)我们对使用JMS有什么兴趣?JMS有哪些好处?

2)在哪种情况下更喜欢JMS与实体bean?

感谢您的回复和反馈!

java entity asynchronous jms message-queue

11
推荐指数
2
解决办法
6714
查看次数

NoClassDefFoundError(初始化失败) - Websphere和IBM MQ

我在基于Spring的webapp上遇到问题,该Webapp正在部署到Websphere并与IBM MQ交互.

一切都很好,直到我尝试一些失败测试.

当webapp启动并运行时,我会停止IBM MQ.然后我调用webapp发送JMS消息.Web应用程序在调用JmsTemplate.convertAndSend时挂起,并在ffdc目录中找到以下异常.

注意JmsTemplate是使用JNDIObjectFactoryBean初始化的,它从Websphere获得了MQ Connection Factory设置.

谁能解释"初始化失败"背后的原因?

[27/01/11 14:29:39:498 GMT]     FFDC Exception:java.lang.NoClassDefFoundError SourceId:com.ibm.ws.asynchbeans.J2EEContext.run ProbeId:894 Reporter:com.ibm.ws.asynchbeans.J2EEContext@1280128
java.lang.NoClassDefFoundError: com.ibm.msg.client.wmq.common.internal.Reason (initialization failure)
        at java.lang.J9VMInternals.initialize(J9VMInternals.java:140)
        at com.ibm.msg.client.wmq.internal.WMQMessageProducer.checkJmqiCallSuccess(WMQMessageProducer.java:1024)
        at com.ibm.msg.client.wmq.internal.WMQMessageProducer.checkJmqiCallSuccess(WMQMessageProducer.java:997)
        at com.ibm.msg.client.wmq.internal.WMQMessageProducer.access$800(WMQMessageProducer.java:63)
        at com.ibm.msg.client.wmq.internal.WMQMessageProducer$SpiIdentifiedProducerShadow.initialise(WMQMessageProducer.java:758)
        at com.ibm.msg.client.wmq.internal.WMQMessageProducer.<init>(WMQMessageProducer.java:972)
        at com.ibm.msg.client.wmq.internal.WMQSession.createProducer(WMQSession.java:943)
        at com.ibm.msg.client.jms.internal.JmsSessionImpl.createProducer(JmsSessionImpl.java:1162)
        at com.ibm.msg.client.jms.internal.JmsQueueSessionImpl.createSender(JmsQueueSessionImpl.java:131)
        at com.ibm.mq.jms.MQQueueSession.createSender(MQQueueSession.java:148)
        at com.ibm.mq.jms.MQQueueSession.createProducer(MQQueueSession.java:249)
        at com.ibm.ejs.jms.JMSMessageProducerHandle.<init>(JMSMessageProducerHandle.java:132)
        at com.ibm.ejs.jms.JMSSessionHandle.createProducer(JMSSessionHandle.java:1788)
        at org.springframework.jms.core.JmsTemplate.doCreateProducer(JmsTemplate.java:968)
        at org.springframework.jms.core.JmsTemplate.createProducer(JmsTemplate.java:949)
        at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:568)
        at org.springframework.jms.core.JmsTemplate$3.doInJms(JmsTemplate.java:541)
        at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:471)
        at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:539)
        at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:617)
Run Code Online (Sandbox Code Playgroud)

java websphere spring jms ibm-mq

11
推荐指数
2
解决办法
4万
查看次数

如何使用JMS队列将消息发送到特定的Receiver

是否可以使用JMS队列(HornetQ)向特定接收器发送消息?

在众多接收器中,我希望接收器能够在Linux OS上运行某些消息.

每个建议都是适当的.

谢谢.

java jms java-ee hornetq

11
推荐指数
1
解决办法
2万
查看次数

如何进行JMS同步请求

我有一个webapp,可以从外部应用程序获取和显示数据,只能通过消息传递(JMS)访问.

因此,如果用户在浏览器上提交请求,则相同的HTTP请求线程必须与Messaging系统(MQ Series)交互,以便相同的请求线程可以显示从Messaging System接收的数据.

我可以在这里使用一种模式吗?我在网上看到了一些模糊的引用,它们以这种方式使用"Correlation ID":

Msg m = new TextMsg("findDataXYZ");
String cr_id = m.setCorrelationID(id);

sendQueue.send(m).

// now start listening to the Queue for a msg that bears that specific cr_id

Response r = receiverQueue.receive(cr_id);
Run Code Online (Sandbox Code Playgroud)

那里有更好的东西吗?我发现其他模式期望响应是异步接收的..这对我来说不是一个选项,因为我必须在同一个HTTP请求上发回响应.

java architecture jms ibm-mq

11
推荐指数
2
解决办法
2万
查看次数

使用JMS可以实现"公平排队"

我需要实现一个公平的排队系统,以便根据当前排队的消息中该标头的所有值,基于某些消息标头的值以循环方式处理消息.

系统中的消息自然按某些属性分组,其中有数千个可能的值,当前排队的消息的值集随时间而变化.类比将是具有标题的消息,该标题是在消息创建时的毫秒部分时间.因此,标头将具有介于0和999之间的值,并且将在当前排队的所有消息中存在值的一些分布.

我需要能够按顺序使用消息,使得没有特定值优先于任何其他值.如果排队消息的头值是这样分发的

value | count
------|-------
  A   |   3
  B   |   3
  C   |   2
Run Code Online (Sandbox Code Playgroud)

那么消费订单就是A,B,C,A,B,C,A,B.

如果将具有其他值的消息添加到队列,则应将它们自动添加到循环序列中.

这意味着对当前排队的消息有一些了解,但不要求消费者掌握这些知识; 经纪人可能有以某种方式订购交货的机制.

可以接受公平排队开始的某个阈值.也就是说,如果阈值为10,那么顺序处理具有相同值的10个消息是可接受的,但处理的第11个消息应该是顺序的下一个值.如果唯一排队的消息具有该值,则Next可能是相同的值.

可能的值的数量可能排除了简单地为每个队列创建队列,并且迭代队列,尽管尚未经过测试.

我们正在使用HornetQ,但如果有替代方案可以提供这些语义,那么我很想知道.

消息是作业,标头值是用户ID.正在寻求的是,在某些限制内,任何特定用户的任何工作都不会过度拖延任何其他用户的工作; 生成100万个作业的用户不会导致其他用户的后续作业等待处理该百万个作业.

HornetQ队列中的消费者按创建顺序进行评估,因此向队列添加选择性消费者不会阻止任何全能消费者接收与过滤器匹配的消息.

JMS组似乎没有帮助,因为它将给定的组(用户?)绑定到给定的消费者.

一个潜在的解决方案是基于需求(例如:来自同一用户10级连续的消息)在主题创建选择性的消费者,与一些管理所有选择性消费者的生命周期,以确保捕获所有不处理相同的信息.虽然可能这似乎有一些繁重的同步要求.

jms hornetq

11
推荐指数
1
解决办法
334
查看次数

ActiveMQ - 通过命令行删除/清除所有队列

有没有办法通过命令行(win/linux)删除/清除ActiveMQ中的所有队列?我只能找到特定队列的命令.或者也许有办法通过activeMQ管理员这样做?同样,我只找到了如何逐个删除/清除队列,这可能非常繁琐.

谢谢!

activemq-classic jms message-queue

11
推荐指数
3
解决办法
2万
查看次数

Apache Camel vs Apache Kafka

据我所知,Apache Kafka是异步消息传递平台,Apache Camel是一个实现企业集成模式的平台.

那么,Apache Camel和Apache Kafka的实际差异是什么?我们计划用Apache Camel实现这个系统,这个系统比较容易,但是我们的客户想要Apache Kafka而不是理性的.

选择Apache Kafka实现消息队列功能有什么好处,这也可以用Apache Camel实现?我担心Kafka会给项目带来不必要的开销.我们比较苹果和橘子吗?

我们需要的是简单的API来设置和使用群集消息队列.我们的初始计划是使用Camel在集群JMS或ActiveMQ队列上使用/生成.Kafka如何让这项工作更轻松?无论哪种情况,应用程序本身都可以在WebLogic服务器上运行.

消息传递是点对点类型,其中有多个相同服务的实例在运行,但只有一个实例应该处理消息并根据负载平衡策略发出结果.消息队列也是群集的,因此服务实例或队列实例的故障都不是SPOF.

apache messaging jms apache-camel apache-kafka

11
推荐指数
2
解决办法
1万
查看次数