這幾天試了試spring-jms結(jié)合activemq使用方法,項目架構(gòu)使用的是spring boot京腥。這里記下來,留著以后或許會使用。
使用的是spring-jms 4.2.3.RELEASE和activemq-client 5.14.1版本
1.關(guān)于jms和activemq
對jms和activemq不了解的可以先了解一下相關(guān)內(nèi)容惶楼,這里提供一下地址:
<<深入淺出JMS(二)--ActiveMQ簡單介紹以及安裝>>
2.pom增加jar包
有了上面的了解,我們就可以開始下面的使用
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>5.14.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
</dependency>
3.spring boot配置
在這一步開始前诊杆,你需要在你的本地或遠(yuǎn)程安裝好activemq的客戶端歼捐,沒有安裝的百度或看下這篇文章
<<深入淺出JMS(二)--ActiveMQ簡單介紹以及安裝>>
#jms activemq
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.in-memory=true
spring.activemq.pooled=false
上面配置了activemq的地址和用戶名和密碼
生產(chǎn)者
下面開始創(chuàng)建消息的生產(chǎn)者一方,這里我自定義了消息的實體對象晨汹、消息來源豹储、消息轉(zhuǎn)換器
生產(chǎn)者
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component;
import javax.jms.Destination;
/**
* info:
* Created by shang on 2016/12/2.
*/
@Component
public class Producer {
@Autowired
private JmsTemplate jmsTemplate;
public void send(SprayEvent event,Destination destination,SprayMessageConverter messageConverter) {
jmsTemplate.setMessageConverter(messageConverter);
jmsTemplate.setDefaultDestination(destination);
jmsTemplate.convertAndSend(event);
}
}
消息實體,這里使用的是隊列模式(Queue)
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.stereotype.Component;
/**
* info:jms activemq的事件
* Created by shang on 2016/12/3.
*/
@Component
public class SprayEvent {
/**
* 消息類型:隊列模式
*/
public static final ActiveMQQueue SPRAY_TASK_EVENT_QUEUE=new ActiveMQQueue("SPRAY_TASK_EVENT_QUEUE");
private Event event;
private String text;
public Event getEvent() {
return event;
}
public void setEvent(Event event) {
this.event = event;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public static enum Event {
EVENT_TACK_SUCCESS; //定時任務(wù)執(zhí)行成功
}
}
消息轉(zhuǎn)換器
import org.springframework.jms.support.converter.MessageConversionException;
import org.springframework.jms.support.converter.MessageConverter;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;
/**
* info:
* Created by shang on 2016/12/3.
*/
@Component
public class SprayMessageConverter implements MessageConverter{
@Override
public Message toMessage(Object o, Session session) throws JMSException, MessageConversionException {
Assert.notNull(o);
TextMessage message = session.createTextMessage();
if(o instanceof SprayEvent){
SprayEvent event = (SprayEvent) o;
message.setStringProperty("event", event.getEvent().toString());
message.setText(event.getText());
}
return message;
}
@Override
public Object fromMessage(Message message) throws JMSException, MessageConversionException {
return message;
}
}
消費者
消費者比較簡單淘这,只要使用@jmsListener
注解的方法即可監(jiān)聽指定事件
destination是生產(chǎn)者所發(fā)送的標(biāo)識剥扣,用法如下:
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
/**
* info:
* Created by shang on 2016/12/2.
*/
@Component
public class Consumer {
@JmsListener(destination = "SPRAY_TASK_EVENT_QUEUE")
public void receiveMessage(String text) {
System.out.println("消費了: <" + text + ">");
}
}
最后需要在spring boot啟動里加上@EnableJms
注解就可以
4.使用
在任意的方法里使用生產(chǎn)者的生產(chǎn)消息方法即可,如下方法:
@Autowired
private Producer producer;
@Scheduled(cron = "0/20 * * * * ? ")
public void sendJms() {
System.out.println("每20秒執(zhí)行一次--------------------");
SprayEvent event=new SprayEvent();
event.setEvent(SprayEvent.Event.EVENT_TACK_SUCCESS);
event.setText("Jms Message to activemq,my name is hello");
producer.send(event,SprayEvent.SPRAY_TASK_EVENT_QUEUE,new SprayMessageConverter());
}
5.結(jié)束
上面的內(nèi)容就是spring boot 里使用activemq的方法铝穷,如果是spring mvc項目就可能需要配置spring-xml文件
網(wǎng)上也有不少相關(guān)案例钠怯,感覺這兩篇文章不錯
<< 深入淺出JMS(三)--ActiveMQ簡單的HelloWorld實例>>
<<深入淺出JMS(四)--Spring和ActiveMQ整合的完整實例>>
有什么問題歡迎給我來信或留言!