参照javaeyes前辈做的jms配置如下:
tomcat下Context.xml配置:
WEB-INF/web.xml
<Resource name="jms/ConnectionFactory"
auth="Container"
type="org.apache.activemq.ActiveMQConnectionFactory"
description="JMS Connection Factory"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
brokerURL="vm://localhost"
brokerName="LocalActiveMQBroker"/>
<Resource name="jms/Queue"
auth="Container"
type="org.apache.activemq.command.ActiveMQQueue"
description="my Queue"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
physicalName="FOO.BAR"/>
<Resource name="jms/JMSChat"
auth="Container"
type="org.apache.activemq.command.ActiveMQTopic"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
physicalName="stockQuoteTopic"/>
spring配置:
<!-- JMS整合 -->
class="org.springframework.jndi.JndiObjectFactoryBean">
<bean id="jmsTopic"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jms/JMSChat"></property>
</bean>
<bean id="jmsTemplate"
class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsConnectionFactory"></property>
<property name="defaultDestination" ref="jmsTopic"></property>
</bean>
<!-- 在jmsTemplate中指明发送目的地即jmsTopic队列 -->
<bean id="sender" class="com.xch.websecurity.util.message.Sender">
<property name="jmsTemplate" ref="jmsTemplate"></property>
</bean>
<bean id="receive" class="com.xch.websecurity.util.message.Receiver"></bean>
<!-- 指明了jmsQueue队列的接收监听器 -->
<bean id="listenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsConnectionFactory"></property>
<property name="destination" ref="jmsTopic"></property>
<property name="messageListener" ref="receive"></property>
</bean>
com.xch.websecurity.util.message.Sender类代码:
public class Sender {
private JmsTemplate jmsTemplate;
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
public void send(final String text){
System.out.println("---Send:"+text);
jmsTemplate.send(new MessageCreator(){
public Message createMessage(Session arg0) throws JMSException {
return arg0.createTextMessage(text);
}
});
}
}
com.xch.websecurity.util.message.Receiver代码:
public class Receiver implements MessageListener {
public void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage text = (TextMessage) message;
try {
System.out.println("ReceiveJms:" + text.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
servlet相关代码:
String Text = request.getParameter("text");
sender.send(Text);
System.out.println("asdfasdf");
运行结果:
第一次:
---Send:uhkjlkj
asdfasdf
ReceiveJms:uhkjlkj
ReceiveJms:uhkjlkj
第二次:
---Send:iljlkjkl
ReceiveJms:iljlkjkl
ReceiveJms:iljlkjkl
ReceiveJms:iljlkjkl
asdfasdf
第三次:ReceiveJms:iljlkjkl依次递增打印
而把
java:comp/env/jms/JMSChat换为java:comp/env/jms/Queue
的点对点配置没错 就是topic方式是出现这问题
[b]问题补充:[/b]
我在另一个应用B里配置了同样的代码,都如下:
class="org.springframework.jndi.JndiObjectFactoryBean">
<bean id="jmsTopic"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jms/JMSChat"></property>
</bean>
<bean id="jmsTemplate"
class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsConnectionFactory"></property>
<property name="defaultDestination" ref="jmsTopic"></property>
</bean>
<!-- 在jmsTemplate中指明发送目的地即jmsTopic队列 -->
<bean id="receive" class="com.xch.websecurity.util.message.Receiver"></bean>
<!-- 指明了jmsQueue队列的接收监听器 -->
<bean id="listenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsConnectionFactory"></property>
<property name="destination" ref="jmsTopic"></property>
<property name="messageListener" ref="receive"></property>
</bean>
可是B还是收不到我看了http://www.iteye.com/topic/234101的说连接到同一服务器就ko啦!~~我连接的jndi名都一样的就是收不到