activemq+spring简单记录

来源:互联网 发布:牵机药 知乎 编辑:程序博客网 时间:2024/06/15 10:56

1,activeMq连接池

<bean id="jmsConnectionFacotry" class="org.apache.activemq.pool.PooledConnectionFactory"
    destroy-method="stop" init-method="start">
    <property name="connectionFactory">
        <bean class="org.apache.activemq.ActiveMQConnectionFactory">
            <property name="brokerURL"
                value="failover:(tcp://10.0.0.161:61616)?randomize=false"></property>
            <property name="sendTimeout" value="100000"></property>
        </bean>
    </property>
</bean>

定义队列目的名称配置

<bean id="destinationQueue" class="org.apache.activemq.command.ActiveMQQueue">
        <constructor-arg value="test_1_queue"></constructor-arg>
</bean>

定义处理接受的消息配置

<bean id="queueMessageListener"
        class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
        <constructor-arg>
            <bean class="com.lyl.com.activeMqSpringTest.JmsMessageListenerImpl"></bean><!-- 消息处理业务 -->
        </constructor-arg>
        <property name="defaultListenerMethod" value="onMessage" /><!-- 消息业务处理的方法 -->
        <property name="messageConverter">
            <null />
        </property>
    </bean>

定义spring监听配置

<bean id="springListenerQueueContainer"
        class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="jmsConnectionFacotry" /> <!-- spring容器去哪里监听 -->
        <property name="destination" ref="destinationQueue" /><!-- spring容器监听消息的目的地 -->
        <property name="messageListener" ref="queueMessageListener" /> <!-- spring监听到消息交给谁去处理 -->
        <property name="concurrentConsumers" value="5" /><!-- -->
    </bean>

--------------------java 接受queue例子

package com.lyl.com.activeMqSpringTest;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;


public class JmsMessageListenerImpl implements MessageListener {

    @Override
    public void onMessage(Message paramMessage) {
        //
        TextMessage textMessage = null;
        String megContextString="";
        if(paramMessage!=null && paramMessage instanceof TextMessage){
            textMessage = (TextMessage) paramMessage;
            try {
                String typeString  = textMessage.getStringProperty("dddd");//得到消息属性列表
                megContextString = textMessage.getText();
                System.out.println("JmsMessageListenerImpl:"+megContextString);
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
        System.out.println("监听完");
    }
}

--------------------发送队列消息配置例子--------------------------------

使用JmsTemplate

<!-- jmsTemplate -->
    <bean id="sendTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="jmsConnectionFacotry"></property>
        <property name="defaultDestination" ref="destinationQueue"></property>
        <!-- Needs to be true for the deliveryMode to work -->
        <property name="explicitQosEnabled" value="true" />
        <!-- Value = javax.jms.DeliveryMode.PERSISTENT -->
        <property name="deliveryMode" value="2" />
    </bean>

<!-- 发送消息 业务 -->
    <bean id="jsmSender"
        class="com.lyl.com.activeMqSpringTest.JmsMessageQueueSenderImpl">
        <property name="sendTemplate" ref="sendTemplate"></property>
        <property name="destination" ref="destinationQueue"></property>
    </bean>

-----Java发送queue消息

public class JmsMessageQueueSenderImpl {

    private JmsTemplate   sendTemplate;

    private static String stringPropertyNameString = "dddd";

    public JmsTemplate getSendTemplate() {
        return sendTemplate;
    }

    public void setSendTemplate(JmsTemplate sendTemplate) {
        this.sendTemplate = sendTemplate;
    }

    public void sendMessage(final String msg, final String propertyName) {
        MessageCreator contentCreator = new MessageCreator() {
            @Override
            public Message createMessage(Session paramSession) throws JMSException {
                TextMessage txt = paramSession.createTextMessage(msg);
                txt.setStringProperty(stringPropertyNameString, propertyName);
                return txt;
            }
        };
        sendTemplate.send(contentCreator);
    }

}

-------------------接受消息回复的queue例子 (接受到消息后 指定回复已收到消息目的地)

<bean id="destinationQueue2" class="org.apache.activemq.command.ActiveMQQueue">
        <constructor-arg value="test_22_queue"></constructor-arg>
    </bean>
    <bean id="queueMessageListener2" class="com.lyl.com.activeMqSpringTest.JmsMessageListener2">
        <property name="destination" ref="destinationQueue2"></property><!-- 接收到消息后 发送回复消息目的地 -->
    </bean>
    <!-- spring消息监听 -->
    <bean id="springListenerQueueContainer2"
        class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="jmsConnectionFacotry" /> <!-- spring容器去哪里监听 -->
        <property name="destination" ref="destinationQueue" /><!-- spring容器监听消息的目的地 -->
        <property name="messageListener" ref="queueMessageListener2" /> <!-- spring监听到消息交给谁去处理 -->
        <property name="concurrentConsumers" value="5" /><!-- -->
    </bean>

-----------java

package com.lyl.com.activeMqSpringTest;

import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.springframework.jms.listener.SessionAwareMessageListener;

public class JmsMessageListener2 implements SessionAwareMessageListener<TextMessage> {

    private Destination destination;

    public Destination getDestination() {
        return destination;
    }
    public void setDestination(Destination destination) {
        this.destination = destination;
    }
    @Override
    public void onMessage(TextMessage paramM, Session paramSession) throws JMSException {
        System.out.println("JmsMessageListener2收到的消息:" + paramM.getText());
        MessageProducer producer = paramSession.createProducer(destination);
        TextMessage message = paramSession.createTextMessage("发送已接受到消息回复");
        producer.send(message);
    }
}

---------------------------------订阅主题接受消息例子

<!-- 订阅目的地 -->
    <bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTempTopic">
        <constructor-arg value="test_3_topic"></constructor-arg>
    </bean>
    <!-- 订阅业务处理 -->
    <bean id="topicMessageListener" class="com.lyl.com.activeMqSpringTest.JmsTopicMessageListener"></bean>
    <!-- spring 容器监听 -->
    <bean id="springListenerTopicContainer"
        class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="jmsConnectionFacotry" /> <!-- spring容器去哪里监听 -->
        <property name="destination" ref="topicDestination" /> <!-- spring容器监听消息的目的地 -->
        <property name="messageListener" ref="topicMessageListener" /> <!-- spring监听到消息交给谁去处理 -->
        <property name="pubSubDomain" value="true" />  <!-- 一定得设置 才会是订阅者模式 -->
        <property name="concurrentConsumers" value="5" />
    </bean>

--------------Java

package com.lyl.com.activeMqSpringTest;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

public class JmsTopicMessageListener implements MessageListener {

    @Override
    public void onMessage(Message paramMessage) {
       String msgContextString ="";
       TextMessage message=null;
       if(paramMessage !=null && paramMessage instanceof TextMessage){
           message = (TextMessage) paramMessage;
           try {
            String proString = message.getStringProperty("dddd");
            System.out.println("proString:"+proString);
            msgContextString = message.getText();
            System.out.println("msgContextString:"+msgContextString);
        } catch (JMSException e) {
            e.printStackTrace();
        }
       }
    }
}

--------------------------订阅主题发送消息

<!-- 发送topic 消息 -->
    <bean id="sendTopicTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="jmsConnectionFacotry" />
        <property name="defaultDestination" ref="topicDestination" />
        <!-- <property name="defaultDestination" value="test_3_topic" /> -->
        <!-- Needs to be true for the deliveryMode to work -->
        <property name="explicitQosEnabled" value="true" />
        <!-- Value = javax.jms.DeliveryMode.PERSISTENT 消息做持久化 -->
        <property name="deliveryMode" value="2" />
        <property name="receiveTimeout" value="10000" />
        <property name="timeToLive" value="86400000" />
        <property name="pubSubDomain" value="true" />
        <property name="pubSubNoLocal" value="false" />
    </bean>

    <!-- 发送消息 业务 -->
    <bean id="jsmSenderTopic"
        class="com.lyl.com.activeMqSpringTest.JmsMessageTopicSenderImpl">
        <property name="sendTemplate" ref="sendTopicTemplate"></property>
    </bean>

----------------------Java

package com.lyl.com.activeMqSpringTest;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

public class JmsMessageTopicSenderImpl {

    private JmsTemplate sendTemplate;

    public JmsTemplate getSendTemplate() {
        return sendTemplate;
    }

    public void setSendTemplate(JmsTemplate sendTemplate) {
        this.sendTemplate = sendTemplate;
    }

    public void sendTopicMessage(final String content, final String propertyName) {
        MessageCreator messageCreator = new MessageCreator() {

            @Override
            public Message createMessage(Session paramSession) throws JMSException {
                TextMessage txt = null;
                txt = paramSession.createTextMessage(content);
                txt.setStringProperty("dddd", propertyName);

                return txt;
            }
        };
        sendTemplate.send(messageCreator);
    }

}

-------------------------------------------------------------------

安装activeMq

启动activeMq

进入目录 /usr/local/apache-activemq-5.5.0/bin

./activemq start

activeMq后台控制页面账号在/usr/local/apache-activemq-5.5.0/conf/jetty-realm.properties 


原创粉丝点击