spring整合ActiveMQ及測試
阿新 • • 發佈:2020-12-22
技術標籤: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容器一直存在。