1

我有一台服务器需要将消息发送到单独的应用程序。我正在使用 Spring JmsTemplate,但是,我在启动和运行配置时遇到了一些问题。

现在,我收到以下异常:

Error creating bean with name 'connectionFactory' defined in ServletContext resource [/WEB-INF/config/application-context.xml]: Invocation of init method failed; nested exception is javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out]

(如果你愿意,我可以发布完整的堆栈跟踪,但这只是那些嵌套异常的长版本。)

“接收超时”部分听起来像是在尝试接收消息,我不想这样做。这里的所有内容都是从几个不同的示例和 SO 帖子中汇总而来的,我很难理解所有不同的部分以及它们在做什么。除了可能导致错误的任何原因之外,如果我没有收到消息,还有什么我不需要的吗?

在我的 JmsQueueSender 类(发送消息)中:

private JmsTemplate jmsTemplate;
private Destination destination;

public void setConnectionFactory(ConnectionFactory cf) {
    jmsTemplate = new JmsTemplate(cf);
}

public void setQueue(Queue queue) {
    this.destination = queue;
}

在我的应用程序上下文中:

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
        <props>
            <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
            <!-- <prop key="java.naming.provider.url">jnp://address.com:port</prop> -->
            <prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop>
        </props>
    </property>
</bean>

<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate" ref="jndiTemplate" />
    <property name="jndiName" value="ConnectionFactory" />
</bean>

<bean id="jmsQueueConnectionFactory"
    class="org.springframework.jms.connection.SingleConnectionFactory">
    <property name="targetConnectionFactory" ref="connectionFactory"/>
    <property name="pubSubDomain" value="false" />
</bean>

<bean id="jmsDestinationResolver"
    class="org.springframework.jms.support.destination.JndiDestinationResolver">
    <property name="jndiTemplate">
        <ref bean="jndiTemplate"/>
    </property>
    <property name="cache">
        <value>true</value>
    </property>
</bean>

<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate102">
    <property name="connectionFactory" ref="jmsQueueConnectionFactory" />
    <property name="destinationResolver" ref="jmsDestinationResolver" />
    <property name="pubSubDomain" value="false" />
</bean>

<bean id="jmsSender" class="package.JmsQueueSender">
    <property name="queue" value="queue/AlertQueueGIAfterSent" />
    <property name="connectionFactory" ref="jmsQueueTemplate" />
</bean>
4

0 回答 0