标签: jms

EMS,ESB和MOM,JMS

以下术语之间的关系和区别是什么?

  • 企业消息系统(EMS)
  • 企业服务总线(ESB)
  • 面向消息的中间件(MOM)
  • Java消息传递服务(JMS)

esb jms ems mom

18
推荐指数
3
解决办法
1万
查看次数

如何临时禁用消息侦听器

什么是临时禁用消息监听器的好方法?我想解决的问题是:

  • 消息侦听器接收JMS消息
  • 尝试处理邮件时出错.
  • 我等待我的系统再次准备好能够处理消息.
  • 在我的系统准备好之前,我不再需要任何消息了,所以...
  • ...我想禁用消息监听器.
  • 我的系统已准备好再次处理.
  • 处理失败的消息,并确认JMS消息.
  • 再次启用消息侦听器.

现在,我正在使用Sun App Server.我通过在MessageConsumer中将其设置为null来禁用消息侦听器,并使用setMessageListener(myOldMessageListener)再次启用它,但在此之后我不再收到任何消息.

java jms

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

Java HTTP推送(消息传递)的最佳解决方案

我们希望将数据从服务器推送到客户端,但只能使用HTTP(端口80).消息传递的最佳解决方案是什么?一个想法是Comet.是否有其他想法或框架可以提供JMS over HTTP.(是的,ActiveMQ也支持它,但是哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇.

java messaging jms comet http

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

没有端点适配器; 您的端点是使用@Endpoint注释的,还是实现了MessageHandler或PayloadEndpoint等受支持的接口?

我正在努力使用带有JMS示例的Spring-WS.我按照Spring的建议设置了Spring-WS和JMS接线.但我一直得到以下错误.我不知道如何绕过这个问题,任何帮助将不胜感激:

[org.springframework.ws.soap.server.endpoint.SoapFaultAnnotationExceptionResolver] - 
Resolving exception from endpoint 
[org.springframework.ws.samples.mtom.ws.ImageRepositoryEndpoint@1c8b0b1]: 
java.lang.IllegalStateException: No adapter for endpoint 
[org.springframework.ws.samples.mtom.ws.ImageRepositoryEndpoint@1c8b0b1]: 
Is your endpoint annotated with @Endpoint, or does it implement a supported interface like MessageHandler or PayloadEndpoint?

[org.springframework.ws.soap.server.endpoint.SimpleSoapExceptionResolver] - Resolving exception from endpoint
[org.springframework.ws.samples.mtom.ws.ImageRepositoryEndpoint@1c8b0b1]: 
java.lang.IllegalStateException: No adapter for endpoint [org.springframework.ws.samples.mtom.ws.ImageRepositoryEndpoint@1c8b0b1]: 
Is your endpoint annotated with @Endpoint, or does it implement a supported interface like MessageHandler or PayloadEndpoint?

[org.springframework.ws.soap.server.SoapMessageDispatcher] - 
Endpoint invocation resulted in exception - responding with Fault
java.lang.IllegalStateException: No adapter for endpoint  [org.springframework.ws.samples.mtom.ws.ImageRepositoryEndpoint@1c8b0b1]: 
Is your …
Run Code Online (Sandbox Code Playgroud)

java spring-ws jms

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

JDBC和JMS的Spring事务同步

我有一个在jboss上运行的spring web app,当前配置为使用HibernateTransactionManager进行db事务,JmsTransactionManager用于jms.对于jms,我们使用Camel和ActiveMQ,我们的数据库是DB2.在一个事务中,我需要将大量记录写入数据库并发送两个异步jms消息.jms消息是事件通知,我只希望在数据库事务提交时发送它们.

我愿意接受在jdbc事务已经提交之后与代理通信失败的风险(因此没有发送消息但是db已经提交)所以我认为我不需要正确的XA.

我相信我需要的是使用spring transaction同步的"尽力而为"的事务管理.

spring文档提示了spring将同步两个事务并仅在jdbc事务提交后提交jms事务这一事实 - 但我认为不是很清楚.这里的spring文档http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html#tx-resource-synchronization没有详细介绍它是如何工作的.

我发现其他一些消息来源说spring会做我想要的,包括下面的一些javadoc,并且我已经写了一些集成测试,也显示了它.

http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/jms/support/JmsAccessor.html#setSessionTransacted%28boolean%29这里的setSessionTransacted上的javadoc听起来就像我想要的那样.

从我所看到的,我认为创建Camel JmsConfiguration与事务处理设置为true就足够了:

<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
    <property name="connectionFactory" ref="pooledConnectionFactory"/>
    <property name="transacted" value="true"/>
    <property name="concurrentConsumers" value="10"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

然而,我需要说服我工作的人有点怀疑,并认为我的集成测试只能起作用,因为副作用很少,而不是有意的弹簧特征.

所以我的问题是 - 我是否正确可以依赖Spring来同步事务并始终在jdbc事务之后提交jms事务,或者这不是我应该依赖的东西,你能否指出我所说的任何官方文档那清楚吗?我想一般来说这是一个很好的方法,或者我们应该以不同的方式管理这些交易?

java spring transactions jms apache-camel

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

如何理解JMS中的"同步"和"异步"消息?

阅读JMS的一些文件后,我完全被这句话不解synchronousasynchronouns.

见此页:http://docs.oracle.com/cd/E19798-01/821-1841/bncdq/index.html

同步

您使用receive方法同步使用消息.您可以在调用start方法后随时使用此方法:

connection.start();
Message m = consumer.receive();
connection.start();
Message m = consumer.receive(1000); // time out after a second
Run Code Online (Sandbox Code Playgroud)

要异步使用消息,请使用消息侦听器,如下一节所述.

异步

JMS消息侦听器消息侦听器是一个对象,充当消息的异步事件处理程序.此对象实现MessageListener接口,该接口包含一个onMessage方法.在onMessage方法中,您可以定义消息到达时要执行的操作.

使用setMessageListener方法向特定的MessageConsumer注册消息侦听器.例如,如果定义一个名为Listener的类来实现MessageListener接口,则可以按如下方式注册消息监听器:

Listener myListener = new Listener();
consumer.setMessageListener(myListener);
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 据我所知,JMS的本质是异步的.生产者将消息发布到队列/主题,它不需要等待消费者.这是异步行为.怎么会"同步"?

  2. 如果"mesageListener"是异步的,但在我使用spring-jms的测试中,我发现它总是在一个线程中运行.这意味着,如果我写Thread.sleep(2000)onMessage,它具有处理下一条消息之前是等待2秒.它是"异步"吗?

java asynchronous jms synchronous

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

JMS QueueSender线程安全吗?

我想在多线程环境中使用QueueSender.

QueueSender.send()线程安全的?

java queue jms thread-safety

15
推荐指数
2
解决办法
5741
查看次数

如何限制侦听Jboss JMS队列的MDB实例的数量

我遇到以下设置问题:

Java应用程序将电子邮件msg发送到JMS队列,然后侦听队列的MDB使用onMessage方法获取电子邮件msg,它在Gmail SMTP上打开连接,将电子邮件发送到SMTP并关闭连接.对JMS队列中的所有消息执行此操作.

当我在队列中同时拥有最多5条消息时,它工作得很好.5个不同的MDB实例同时拾取所有邮件,因此我有5个并发连接到Gmail SMTP服务器.但是当JMS队列中有更多消息时,我从Gmail SMTP服务器收到连接错误.5个第一个消息是正确发送的,但不是其余的,所以其他消息丢失,因为它们不再在队列中.

所以我的问题是,是否可以限制将侦听JMS队列的MDB实例的数量?如果我最多有5个MDB,那么即使队列中有1000个消息,也只需要更长的时间来清空队列,但至少我不会丢失任何消息.

任何其他建议来解决这个问题将非常感谢.

这是Jboss版本:

[服务器]版本ID:JBoss [Trinity] 4.2.3.GA(build:SVNTag = JBoss_4_2_3_GA date = 200807181417)

MDB的配置如下:

@MessageDriven(activationConfig = {   
  @ActivationConfigProperty( propertyName = "destinationType", propertyValue = "javax.jms.Queue" ),   
  @ActivationConfigProperty( propertyName = "destination", propertyValue = "queue/emailQueue")  
})
Run Code Online (Sandbox Code Playgroud)

你需要更多吗?

谢谢

编辑2011-02-14
也许我想错误地限制MDB实例的数量.我看到了一个关于JMS线程数量的配置.如果我限制将发布到MDB的线程数,也许它会解决我的问题?在再次发布消息之前,JMS是否会等到MDB可用?这样做会有副作用吗?你虽然请.谢谢
结束编辑

jboss jms message-driven-bean ejb-3.0 jboss-4.2.x

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

具有多个使用者的JMS队列

我有一个带HornetQ的JBoss-6服务器和一个队列:

<queue name="my.queue">  
    <entry name="/queue/test"/>  
</queue>
Run Code Online (Sandbox Code Playgroud)

有连接到这个队列中一个不同的消费者(在不同的机器),但只有一个单一的消费者是活动的时间.如果我关闭此消费者,消息将立即由其他消费者处理.

由于我的消息有一些耗时的处理,我希望多个消费者同时处理它们的唯一消息.

我记得早期版本的JBoss中有类似的设置,这种设置没有问题.在Jboss-6中,消息传递系统运行良好 - 除了上述问题.这个问题与hornetq中的多个客户端消费者类似吗?,但情景与我的情况不同.

更新1:如果我关闭(STRG + C)一个消费者,则会有一个短暂的超时(直到服务器识别丢失的消费者),直到下一个消费者获得消息.

更新2:代码段

VoidListener ml = new VoidListener();
QueueConnectionFactory qcf = (QueueConnectionFactory)
                             ctx.lookup("ConnectionFactory");
QueueConnection conn = qcf.createQueueConnection();
Queue queue = (Queue) ctx.lookup(queueName);
QueueSession session = conn.createQueueSession(false,
                                               QueueSession.AUTO_ACKNOWLEDGE);

QueueReceiver recv = session.createReceiver(queue,"");
recv.setMessageListener(ml);
conn.start();
Run Code Online (Sandbox Code Playgroud)

和MessageListerner:

public class OlVoidListener implements MessageListener
{
  public void onMessage(Message msg)
  {
    counter++;
    logger.debug("Message ("+counter+") received");
    try {Thread.sleep(15*1000);} catch (InterruptedException e) {}
  }
}
Run Code Online (Sandbox Code Playgroud)

java jms hornetq jboss6.x

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

使用HornetQ在JBoss 7中使用JMS队列的'持久'属性是什么意思?

在使用HornetQ在JBoss 7上配置JMS队列期间(基于standalone-full.xml配置),我注意到一个属性'持久'.

在此输入图像描述

我浏览了几个来源,其中许多人声称队列总是"持久",这意味着即使在发送时潜在的接收器处于非活动状态,也会始终传递消息.

JBoss 7 HornetQ中的这个属性是指临时队列吗?或者此属性是否指某种非临时非持久队列?

java jms java-ee hornetq jboss7.x

15
推荐指数
3
解决办法
1万
查看次数