我有一台服务器需要将消息发送到单独的应用程序。我正在使用 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>