永发信息网

ActiveMQ与Spring实现JMS的问题?

答案:1  悬赏:20  手机版
解决时间 2021-08-24 06:40
  • 提问者网友:呐年旧曙光
  • 2021-08-23 08:09
ActiveMQ5.3.2+Spring2.5
【applicationContext.xml】
<bean id="connectionFactory" 
        class="org.apache.activemq.ActiveMQConnectionFactory">  
        <property name="brokerURL" value="tcp://localhost:61616" />  
    </bean>  

    <bean id="jmsTemplate"
        class="org.springframework.jms.core.JmsTemplate">  
        <property name="connectionFactory" ref="connectionFactory" />  
        <property name="defaultDestinationName" value="cmpp" />
    </bean>
     
     
    <bean id="producer" class="com.zero.jms.msgProducer">  
        <property name="jmsTemplate" ref="jmsTemplate" />  
    </bean>  
    <bean id="messageListener" 
        class="org.springframework.jms.listener.adapter.MessageListenerAdapter">  
        <constructor-arg>  
            <bean class="com.zero.jms.msgConsumer" />  
        </constructor-arg>  
        <property name="defaultListenerMethod" value="onMessage" />  
    </bean>  
    <bean id="listenerContainer" 
        class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
        <property name="connectionFactory" ref="connectionFactory" />  
        <property name="destinationName" value="cmpp" />
        <property name="messageListener" ref="messageListener" />  
    </bean>
【msgProducer.java】
public class msgProducer{
    private JmsTemplate jmsTemplate;
       public void send(final String text){
        System.out.println("发送消息:"+text);
        jmsTemplate.send(new MessageCreator(){
            public Message createMessage(Session session) throws JMSException {
                return session.createTextMessage(text);
            }
        });
    }
    public JmsTemplate getJmsTemplate() {
        return jmsTemplate;
    }  
    public void setJmsTemplate(JmsTemplate jmsTemplate) {  
        this.jmsTemplate = jmsTemplate;
    }

【msgConsumer.java】
public class msgConsumer implements MessageListener{  
    public void onMessage(Message message) {
         if (message instanceof TextMessage) {  
             TextMessage text = (TextMessage)message;        
             try{
                 System.out.println("接受消息:" + text.getText()); 
             }catch (JMSException e) {
                 e.printStackTrace();  
             }
         }  
    }  
}
【test.java】
public static void main(String[] args) {  
        ApplicationContext xt = new    ClassPathXmlApplicationContext("applicationContext.xml");  
        msgProducer producer = (msgProducer) xt.getBean("producer");
        producer.send("12");
    }

【问题】
使用test.java测试程序的时候,消息可以发送也可以接收,但是如果我发消息发的比较平凡的话,也就是连续的调用test.java,消息任然是可以发送和接收,会出现类似像系统中的缓存一样,例如发送一条消息aa(第一次成功发送与接收),连续发的话,接收到的可能为多个aa,甚至会出现很久之前所发送过的内容也会出现,如果相隔大概5到10秒钟发一次的话,就没有这样的问题,不知道是java代码错了还是spring配置错了,有请朋友们帮忙看下吧...不胜感激!
最佳答案
  • 五星知识达人网友:十年萤火照君眠
  • 2021-08-23 09:04

Thread.sleep(5000);


延时加载

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯