标签: jms

ActiveMQ Broker仅在Localhost上可连接

有没有办法运行只能在本地检测到的环回JMS适配器?

我不知道如果我的术语是正确的,但我想ActiveMQ代理仅是从代理运行在同一台机器可接.

java activemq-classic jms loopback java-ee

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

在JMS中Context的目的是什么?

我想知道在JMS中Context的目的是什么以及为什么我需要(或应该)初始化它?

java jms

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

NIO和JMS有什么区别

据我所知,Java NIO是一个帮助创建事件驱动应用程序的API.使用选择器通知您的应用程序通过SocketChannel接收的任何数据.JMS(Java消息传递服务)是用于在客户端之间发送/接收消息的消息传递框架.

JMS是Java NIO API的抽象吗?

java nio jms

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

JMS如何在Java中工作?

异步JMS如何工作?我在下面的示例代码:

public class JmsAdapter implements MessageListener, ExceptionListener
{
private ConnectionFactory connFactory = null;
private Connection conn = null;
private Session session = null;

public void receiveMessages() 
{
    try
    {
        this.session = this.conn.createSession(true, Session.SESSION_TRANSACTED);

        this.conn.setExceptionListener(this);

        Destination destination = this.session.createQueue("SOME_QUEUE_NAME");

        this.consumer = this.session.createConsumer(destination);

        this.consumer.setMessageListener(this);

        this.conn.start();
    } 
    catch (JMSException e) 
    {
        //Handle JMS Exceptions Here
    }
}

@Override
public void onMessage(Message message) 
{
    try
    {
        //Do Message Processing Here

        //Message sucessfully processed...  Go ahead and commit the transaction.
        this.session.commit();
    }
    catch(SomeApplicationException e)
    { …
Run Code Online (Sandbox Code Playgroud)

java jms

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

Spring JMS Connections:性能考虑因素

我需要向/从存储在单个JMS服务器上的不同主题发送/接收消息.

我想JmsTemplate用于发送和MessageListenerContainer注册异步侦听器.

我的配置如下所示:

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
        <props>
            <prop key="java.naming.factory.initial">xxx</prop>
            <prop key="java.naming.provider.url">yyy</prop>
        </props>
    </property>
</bean>
<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate" ref ="jndiTemplate"/>
        <property name="jndiName" value="TopicConnectionFactory"/>
    </bean>

    <bean id="singleConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
        <constructor-arg ref="connectionFactory"/>
    </bean>

    <bean id="tosJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="singleConnectionFactory"/>
        <property name="destinationResolver" ref="destinationResolver"/>
        <property name="pubSubDomain" value="true"/>
    </bean>
Run Code Online (Sandbox Code Playgroud)

据我所知singleConnectionFactory,返回总是相同的连接实例,有助于减少每次jmsTemplate需要(例如)发送/接收消息时创建和关闭连接的开销(就像使用法线时一样ConnectionFactory).

我的第一个问题是:如果我创建了多个jmsTemplate(s),他们是否可以共享一个参考singleConnectionFactory?或者,他们要接受不同的情况下,每个(singleConnectionFactory1,singleConnectionFactory2,等)?

阅读API SingleConnectionFactory,我发现了这个:

请注意,Spring的消息侦听器容器支持Connection 在每个侦听器容器实例中使用共享.SingleConnectionFactory组合使用对于跨多个侦听器容器共享单个JMS连接非常有意义.

这听起来对我来说有点神秘.据我所知,每个只能注册一个Listener MessageListenerContainer,所以我不明白连接的共享程度.

假设我要注册N个监听器:我需要重复N次这样的事情:

<bean 
    class="org.springframework.jms.listener.SimpleMessageListenerContainer"> …
Run Code Online (Sandbox Code Playgroud)

performance spring jms spring-jms

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

QueueReceiver receive()不接收消息

我创建了一个连接到WebLogic队列的同步QueueReceiver.

doStuff() {
  ctx = new InitialContext();
  qconFactory = (QueueConnectionFactory) ctx.lookup(CONNECTION_FACTORY);
  queue = (Queue) ctx.lookup(outputFromOrcSyncQueue);
  queueConnection = qconFactory.createQueueConnection();
  queueSession = queueConnection.createQueueSession(true, -1);
  queueReceiver = queueSession.createReceiver(queue);
  Message message = queueReceiver.receive();
  ...
}
Run Code Online (Sandbox Code Playgroud)

true在queueSession创建中,这是因为连接工厂是事务处理的.如果我创建一个no transacted queueSession(通过put false),结果是queueReceiver似乎忽略了receive()通过该doStuff方法的方法(使用相同的行为receive(timeout),它不会在经过之前等待).

我还必须在我的连接工厂(WebLogic连接工厂的配置中的客户端选项卡)上启用同步消费者的预取模式.

我的问题是接收器没有读取发送到队列的任何消息.

我可以在WebLogic控制台上看到我的消息,我甚至可以看到我的queueReceiver正在侦听队列,但是queueReceiver似乎忽略了它们.

替代方法我试过的方法:

  • 在queueSession创建中改变ACK类型(双方,生产者和消费者)
  • 之后send()和之前的生产者会议close()

谢谢.

java weblogic jms

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

EJB"B"看起来从EJB"A"失败,如果A在使用EJB中的EJB在Queue中实例化

Glassfish EJB在以下情况下抛出异常(第二次查找失败)

定时服务 - > JMS队列侦听器 - >第一个EJB - >第二个EJB

但如果Queue被删除它的工作正常.

定时服务 - >第一个EJB - >第二个EJB

注意:它们都位于同一空间的同一服务器上.

  1. Timer Service运行30秒并发JMS Message送到队列
  2. 队列成功接收此消息,并调用FirstEjb实例化的函数@EJB
  3. FirstEjb的方法被成功调用,但它尝试在其中实例化的SecondEjb的另一个函数@EJB(有些如何查找失败).

定时器类

@Stateless
public class MyTimer {
    public static final  Logger logger = Logger.getLogger(MyTimer.class);
    public MyTimer() {

    }

    @Schedule(second="*/30", minute="*",hour="*", persistent=false)
    private void scheduledTimeout(final Timer t) {
        logger.warn("********************* MyTimer scheduledTimeout called ********************************");

        MyMessageSender sender = new MyMessageSender();
        sender.sendMessage(" /////////////// Here is …
Run Code Online (Sandbox Code Playgroud)

jms timer glassfish java-ee ejb-3.0

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

具有SSL连接功能的通用JMS客户端

当前,我已经使用标准JMS API(仅适用于javax.jms.*类)实现了非SSL安全客户端。当提供特定的产品JAR和正确的类名时,它可以连接到任何JMS服务器。

有没有办法通过SSL连接功能实现这种通用的(独立于供应商的)JMS客户端?

我的研究并不成功-我发现了几个使用SSL实现JMS的示例(例如Novell JMSActiveMQ),但是它们都不能避免直接在代码中使用特定于供应商的类,并且实现方式也大不相同。

java ssl jms java-ee

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

使用来自队列的activemq,camel选择器选择特定的头消息

如何使用队列中的特定标头消息.我正在使用camel activemq.

routebuilder:

.....
    from("activemq:Q1").
      .setHeader("myHeader",xpath(...))
          .to("activemq:Q2")
.....
Run Code Online (Sandbox Code Playgroud)

我尝试使用那些在另一个类中具有特定标题的消息.

....
ConsumerTemplate consumerTemplate = camelContext.createConsumerTemplate();
Exchange exchange = consumerTemplate.receive("activemq:Q2",10000);

String body = exchange.getIn().getBody(String.class);
String customvalue = exchange.getIn().getHeader("myHeader", String.class);
.....
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得myHeader = 123的那些消息.

activemq-classic jms apache-camel custom-headers

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

ActiveMQ-是否可以在CLIENT_ACKNOWLEDGE模式下确认单个消息

根据http://docs.oracle.com/javaee/6/api/javax/jms/Message.html#acknowledge()

客户端可以在消费每条消息时分别对其进行确认,也可以选择将消息确认为应用程序定义的组(通过在组中最后收到的消息上调用确认来完成,从而确认会话消耗的所有消息。 )

如何在ActiveMQ中做到这一点?我无法使其工作。

activemq-classic jms

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