首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >春季MDP:轮询间隔?

春季MDP:轮询间隔?
EN

Stack Overflow用户
提问于 2013-01-17 16:51:26
回答 2查看 2.4K关注 0票数 1

客户使用此模式:

  • Apache Camel和CXF JMS接收机
  • 这些内部使用Spring (消息驱动的POJO)来实现它们的消息接收者。
  • 它们部署在7上。
  • 队列管理器是6。
  • Spring使用JNDI队列连接工厂绑定到队列管理器--支持连接池和会话池。

这里有一个这样的消息接收者的例子,这个例子是使用Camel:

代码语言:javascript
运行
复制
<bean id="ibmmq" class="org.apache.camel.component.jms.JmsComponent">
    <property name="configuration" ref="jmsConfig"/>
</bean>

<!-- JNDI reference to the queue manager -->
<jee:jndi-lookup id="myTargetConnectionFactory" jndi-name="${mq.queueconnectionfactory}"/>

<bean id="jmsDestResolver" class="org.springframework.jms.support.destination.JndiDestinationResolver"/>

<bean id="myConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
    <property name="targetConnectionFactory" ref="myTargetConnectionFactory"/>
    <property name="username" value="SOME_USER"/>
    <property name="password" value=""/>
</bean>

<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">

    <property name="connectionFactory" ref="${mq.connectionfactorybean}" />        
    <property name="destinationResolver" ref="jmsDestResolver" />        
    <property name="concurrentConsumers" value="1" />
    <property name="maxConcurrentConsumers" value="1" />

    <!--
        NOTE: If we try to use a cache without a transactionManager we get "Connection closed" errors
    -->
    <property name="cacheLevelName" value="CACHE_NONE" />
</bean>

问题:-- MQ管理员报告了大量针对队列管理器的MGET()请求。目前的假设是,这些接收者不断地轮询信道中的新消息。

他们似乎对MDB(消息驱动bean)没有这个问题。MDP异步实现真的是一种轮询机制吗?如果是的话,是否有办法限制到队列管理器的行程?也许会增加投票间隔?任何见解都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-18 12:28:18

我对CXF不太确定,但对于Camel听众来说:

JmsConfiguration中的默认JMS使用者似乎是" default“类型。在方法上,它将实现一个来自Spring的DefaultMessageListenerContainer。

来自Javadoc

消息侦听器容器变体,它使用普通的JMS,特别是MessageConsumer.receive()调用的循环

接收呼叫将映射到MQ GET调用。

还有一个选项可以指定简单类型的使用者,我猜这就是您想要的。

使用普通JMS的MessageConsumer.setMessageListener()的消息侦听器容器

我在这里不确定,但是Spring文档表明简单的消息侦听器容器不支持XA事务。这可能需要考虑,因为您正在应用程序服务器中运行。

票数 2
EN

Stack Overflow用户

发布于 2013-02-08 20:52:23

我们的大型机Q ( IBM大型机Q)也有类似的问题:

请注意,应用程序进程ID用作传递给队列管理器的默认用户标识。如果应用程序以客户端传输模式运行,则此进程ID必须与服务器机器上的相关授权一起存在。如果需要不同的标识,那么应用程序应该使用createConnection(用户名、密码)方法。

换句话说,除非我们发送适当的凭据,否则IBM使用JVM进程ID登录到mq。我们使用Spring,所以每次我们的DefaultMessageListenerContainer调查Q时,它都必须发送凭证。我勾搭上了其中一个婴儿和巴姆,工作得很有魅力:

代码语言:javascript
运行
复制
public class CustomConnectionFactory extends CachingConnectionFactory {

    private String username;
    private String password;

    ...

    /**
     * This is the secret sauce. Each time when we make a connection, we send
     * the username/password.
     */
    protected Connection doCreateConnection() throws JMSException {
        return getTargetConnectionFactory().createConnection(this.username, this.password);
    }

我们的主创更快乐。然后我们切换到分布式MQ,一切都要好得多!

以下是我们的最后设置:

代码语言:javascript
运行
复制
<!-- This hooks us up to the jndi -->
<jee:jndi-lookup id="telematicsJNDIConnectionFactory" jndi-name="${mq.jndi}" cache="true" lookup-on-startup="true" />
<!-- The outer wrapper must be TransactionAware, the inner custom one will cache the connection -->
<bean id="telematicsConnectionFactory" class="org.springframework.jms.connection.TransactionAwareConnectionFactoryProxy">
    <property name="targetConnectionFactory">
        <bean class="cat.dds.tmatic.utils.CustomConnectionFactory">
            <property name="targetConnectionFactory">
                <ref bean="telematicsJNDIConnectionFactory" />
            </property>
            <property name="username">
                <value>${mq.user}</value>
            </property>
            <property name="password">
                <value>${mq.pass}</value>
            </property>
            <property name="sessionCacheSize">
                <value>10</value>
            </property>
        </bean>
    </property>
    <property name="synchedLocalTransactionAllowed" value="true" />
</bean>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14384038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档