1. 程式人生 > 其它 >spring整合ActiveMQ及測試

spring整合ActiveMQ及測試

技術標籤:E3電商專案學習

第一步:引入依賴(使用Activemq引入三個依賴即可)

       <dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activemq-all</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-
jms</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency>

第二步:編寫配置檔案
applicationContext-ActiveMQ.xml

<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"
> <property name="brokerURL" value="tcp://192.168.25.133:61616" /> </bean> <!-- Spring用於管理真正的ConnectionFactory的ConnectionFactory --> <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<!-- 目標ConnectionFactory對應真實的可以產生JMS Connection的ConnectionFactory --> <property name="targetConnectionFactory" ref="targetConnectionFactory" /> </bean> <!-- 配置生產者 --> <!-- Spring提供的JMS工具類,它可以進行訊息傳送、接收等 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <!-- 這個connectionFactory對應的是我們定義的Spring提供的那個ConnectionFactory物件 --> <property name="connectionFactory" ref="connectionFactory" /> </bean> <!--這個是佇列目的地,點對點的 --> <bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg> <value>spring-queue</value> </constructor-arg> </bean> <!--這個是主題目的地,一對多的 --> <bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic"> <constructor-arg value="topic" /> </bean>

第三步:測試傳送訊息

 //拿到一個spring容器
        ApplicationContext applicationContext= new ClassPathXmlApplicationContext("classpath:spring/applicationContext-ActiveMQ.xml");
        //拿到jmsTemplate,用來接收和傳送訊息
        JmsTemplate jmsTemplate=applicationContext.getBean(JmsTemplate.class);
        //拿到Queue物件
        Destination destination= (Destination) applicationContext.getBean("queueDestination");
        jmsTemplate.send(destination, new MessageCreator() {
            @Override
            public Message createMessage(Session session) throws JMSException {
                return session.createTextMessage("1111111111");
            }
        });

在這裡插入圖片描述
注意:這塊不能倒錯包,倒錯包報錯(Cannot resolve method ‘send(javax.print.attribute.standard.Destination, anonymous org.springframework.jms.core.MessageCreator)’)
匯入的應該是這個包import javax.jms.Destination;
此時傳送訊息成功.
第四步:測試接收訊息
配置監聽類 我們通過自己寫的MyMessageListener來實現監聽。

<bean id="myMessageListener" class="test.MyMessageListener"/>

	<!-- 訊息監聽容器 -->
	<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
		<property name="connectionFactory" ref="connectionFactory" />
		<property name="destination" ref="queueDestination" />
		<property name="messageListener" ref="myMessageListener" />
	</bean>

監聽實現類:


public class MyMessageListener implements MessageListener {
    @Override
    public void onMessage(Message message) {
        TextMessage textMessage= (TextMessage) message;
        String text = null;
        try {
            text = textMessage.getText();
        } catch (JMSException e) {
            e.printStackTrace();
        }
        System.out.println(text);
    }
}

測試成功。
在接受測試時,一定要一直啟動這個spring容器,要不監聽類不起作用,可以這樣實現

public static void main(String[] args) throws IOException {
        ApplicationContext applicationContext= new ClassPathXmlApplicationContext("classpath:spring/applicationContext-ActiveMQ.xml");
        System.in.read();
    }

只要不輸入,那麼這個spring容器一直存在。