1、pom文件添加依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
2、啓動內嵌broker
public static void main(String[] args)throws Exception {
BrokerService brokerService = new BrokerService();
brokerService.setUseJmx(true);
brokerService.setPersistent(false);
brokerService.addConnector("tcp://localhost:61616");
brokerService.start();
}
3、配置
application.yml
spring:
activemq:
broker-url: tcp://localhost:61616
@Component
@EnableJms
public class Config {
@Bean
public Destination queue(){
return new ActiveMQQueue("queue");
}
@Bean
public Destination topic(){
return new ActiveMQTopic("topic");
}
@Bean
public JmsListenerContainerFactory queueListener(ConnectionFactory connectionFactory){
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setPubSubDomain(false);
factory.setConnectionFactory(connectionFactory);
return factory;
}
@Bean
public JmsListenerContainerFactory topicListener(ConnectionFactory connectionFactory){
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setPubSubDomain(true);
factory.setConnectionFactory(connectionFactory);
return factory;
}
}
4、生產者
@Component
@EnableScheduling
public class Producer {
@Resource(name = "queue")
Destination queue;
@Resource(name = "topic")
Destination topic;
@Autowired
JmsMessagingTemplate jmsMessagingTemplate;
@Scheduled(fixedDelay = 3000)
public void send() throws Exception{
MapMessage message = new ActiveMQMapMessage();
message.setInt("id", 1);
message.setString("name", "queue");
jmsMessagingTemplate.convertAndSend(queue, message);
message.setInt("id", 2);
message.setString("name", "topic");
jmsMessagingTemplate.convertAndSend(topic,message);
}
}
5、消費者
@Component
public class Consume {
@JmsListener(destination = "queue",containerFactory = "queueListener")
public void consume(MapMessage map) throws JMSException {
System.out.println("queue接收到的文本---------"+map.getInt("id"));
}
@JmsListener(destination = "topic",containerFactory = "topicListener")
public void consume2(MapMessage map) throws JMSException {
System.out.println("topic接收到的文本---------"+map.getInt("id"));
}
}
6、消息的可靠性:持久化、事務、簽收