springboot activemq
9045 ワード
1.QueueとTopicの2種類のFactoryを含むFactory構成Bean.主にPubSubDomainフィールドの設定(bean.setPubSubDomain(true))
JmsConfiguration.java
2.メッセージ生産者を作成し、1つは任意のオブジェクトをQueueに、1つは任意のオブジェクトをTopicに、一般的にはこの2つがあれば十分です.(個人的な見方)MQproviderServices.java
3.送信する2つのカスタムメッセージクラスMessageを作成します.java
ThirdMessage.java
4.キューメッセージ消費者とトピックメッセージ消費者の両方のメッセージについて作成する.MQConsumerService.java
5.コントロールを作成してテストする
MQController.java
6.テスト結果は、Controllerのメソッドを順次実行します.結果は以下の通りである.log
JmsConfiguration.java
package com.thinvent.service;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
import org.springframework.jms.support.converter.MappingJackson2MessageConverter;
import org.springframework.jms.support.converter.MessageConverter;
import org.springframework.jms.support.converter.MessageType;
import javax.jms.ConnectionFactory;
/**
* Created by GongWenHua on 2017/10/20.
*/
@Configuration
@EnableJms
public class JmsConfiguration {
/**
* topic ListenerContainer
* @param activeMQConnectionFactory
* @return
*/
@Bean
public JmsListenerContainerFactory> jmsListenerContainerTopic(ConnectionFactory activeMQConnectionFactory) {
DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
bean.setPubSubDomain(true);
bean.setConnectionFactory(activeMQConnectionFactory);
/**
*
*/
bean.setMessageConverter(jacksonJmsMessageConverter());
return bean;
}
/**
* queue ListenerContainer
* @param activeMQConnectionFactory
* @return
*/
@Bean
public JmsListenerContainerFactory> jmsListenerContainerQueue(ConnectionFactory activeMQConnectionFactory) {
DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
bean.setConnectionFactory(activeMQConnectionFactory);
/**
*
*/
bean.setMessageConverter(jacksonJmsMessageConverter());
return bean;
}
/**
*
* @return
*/
@Bean
public MessageConverter jacksonJmsMessageConverter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
return converter;
}
}
2.メッセージ生産者を作成し、1つは任意のオブジェクトをQueueに、1つは任意のオブジェクトをTopicに、一般的にはこの2つがあれば十分です.(個人的な見方)MQproviderServices.java
package com.thinvent.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
/**
* Created by GongWenHua on 2017/10/20.
*/
@Component
public class MQProviderService {
@Autowired
private JmsTemplate jmsTemplate;
public void send2Queue(String domainName,final Object message){
if(jmsTemplate.isPubSubDomain()){
jmsTemplate.setPubSubDomain(false);
}
if(StringUtils.isEmpty(domainName)){
jmsTemplate.convertAndSend(message);
}else {
jmsTemplate.convertAndSend(domainName,message);
}
}
public void send2Topic(String domainName,final Object message){
if(!jmsTemplate.isPubSubDomain()){
jmsTemplate.setPubSubDomain(true);
}
if(StringUtils.isEmpty(domainName)){
jmsTemplate.convertAndSend(message);
}else {
jmsTemplate.convertAndSend(domainName,message);
}
}
}
3.送信する2つのカスタムメッセージクラスMessageを作成します.java
package com.thinvent.pojo;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* Created by GongWenHua on 2017/10/20.
*/
@Data
public class Message implements Serializable {
//
private static final long serialVersionUID = 1L;
//
private Map alarm_event_mes;
//
private String alarm_event_title;
// ID
private Integer alarm_type_id;
// ID
private String alarm_action_code;
//
private String remark;
public void add(String key,Object value){
alarm_event_mes.put(key,value);
}
public Object get(String key){
return alarm_event_mes.get(key);
}
public Message(){
create_time = new Date();
alarm_event_mes = new HashMap<>();
}
}
ThirdMessage.java
package com.thinvent.pojo;
import lombok.Data;
import java.io.Serializable;
/**
* Created by GongWenHua on 2017/10/20.
*/
@Data
public class ThirdMessage implements Serializable {
private static final long serialVersionUID = 1L;
String id;
String type;
Integer level;
}
4.キューメッセージ消費者とトピックメッセージ消費者の両方のメッセージについて作成する.MQConsumerService.java
package com.thinvent.service;
import com.thinvent.pojo.Message;
import com.thinvent.pojo.ThirdMessage;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Service;
/**
* Created by GongWenHua on 2017/10/20.
*/
@Service
public class MQConsumerService {
@JmsListener(destination = "portal.admin.topic",containerFactory = "jmsListenerContainerTopic") //
public void receiveTopic(Message message) {
System.out.println("portal.admin.topic");
System.out.println(message);
}
@JmsListener(destination = "portal.admin.topic2",containerFactory = "jmsListenerContainerTopic") //
public void receiveTopic(ThirdMessage message) {
System.out.println("portal.admin.topic2");
System.out.println(message);
}
@JmsListener(destination = "portal.admin.queue",containerFactory = "jmsListenerContainerQueue") //
public void receiveQueue(Message message) {
System.out.println("portal.admin.queue");
System.out.println(message);
}
@JmsListener(destination = "portal.admin.queue2",containerFactory = "jmsListenerContainerQueue") //
public void receiveQueue(ThirdMessage message) {
System.out.println("portal.admin.queue2");
System.out.println(message);
}
}
5.コントロールを作成してテストする
MQController.java
package com.thinvent.controller;
import com.thinvent.pojo.Message;
import com.thinvent.pojo.ThirdMessage;
import com.thinvent.service.MQProviderService;
import com.thinvent.util.ResultVOUtil;
import com.thinvent.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.UUID;
/**
* Created by GongWenHua on 2017/10/19.
*/
@RestController
public class MQController {
@Autowired
private MQProviderService mqProviderService;
@GetMapping("/send/to/topic")
public ResultVO sendToTopic() {
Message message = new Message();
message.setEquip_ip(UUID.randomUUID().toString());
mqProviderService.send2Topic("portal.admin.topic",message);
return ResultVOUtil.success("send ok");
}
@GetMapping("/send/to/queue")
public ResultVO sendToQueue() {
Message message = new Message();
message.setEquip_ip(UUID.randomUUID().toString());
mqProviderService.send2Queue("portal.admin.queue",message);
return ResultVOUtil.success("send ok");
}
@GetMapping("/send/to/topic2")
public ResultVO sendToTopic2() {
ThirdMessage message = new ThirdMessage();
message.setId(UUID.randomUUID().toString());
mqProviderService.send2Topic("portal.admin.topic2",message);
return ResultVOUtil.success("send ok");
}
@GetMapping("/send/to/queue2")
public ResultVO sendToQueue2() {
ThirdMessage message = new ThirdMessage();
message.setId(UUID.randomUUID().toString());
mqProviderService.send2Queue("portal.admin.queue2",message);
return ResultVOUtil.success("send ok");
}
}
6.テスト結果は、Controllerのメソッドを順次実行します.結果は以下の通りである.log
portal.admin.queue
Message(alarm_event_mes={}, alarm_event_title=null, alarm_type_id=null, alarm_action_code=null, alarm_action_name=null, create_time=Fri Oct 20 21:59:45 CST 2017, alarm_level_id=null, equip_ip=443c2f5b-2325-41e0-877c-87a09dc33c9b, remark=null)
portal.admin.queue2
ThirdMessage(id=e69cc7bb-b99e-44d2-9352-2170096c0236, type=null, level=null)
portal.admin.topic
Message(alarm_event_mes={}, alarm_event_title=null, alarm_type_id=null, alarm_action_code=null, alarm_action_name=null, create_time=Fri Oct 20 21:59:55 CST 2017, alarm_level_id=null, equip_ip=83d81e99-b7a6-4a11-90a1-973fa3493d29, remark=null)
portal.admin.topic2
ThirdMessage(id=d22a6fb7-0292-4f5a-9abc-c02be8d7306a, type=null, level=null)