ActiveMQ是一种开源的消息系统,有两种发送方式和接收方式。一种是P2P(Ponit to Point),另外一种是Pub/Sub(Publish/Subscribe,即发布-订阅)。P2P的方式简单的说就是消息一旦被某个消费者消费掉,后面消费者就无法得到这个消息。所以P2P是一对一的关系。而Pub/Sub 则是一对多的关系。一个消息发出,所以监听的消费者都是可以收到的。ActiveMQ的应用广泛。专门用来接收远程频繁发送给的数据,减轻服务器的压力。如下图的应用框架就用到了中间件ActiveMQ
ActiveMQ生产者:
@Value("${spring.activemq.queue-name}")
private String queueName;
@Value("${spring.activemq.topic-name}")
private String topicName;
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Bean(name = "queue")
public Queue queue() {
return new ActiveMQQueue(queueName);
}
@Bean(name = "topic")
public Topic topic() {
return new ActiveMQTopic(topicName);
}
@Autowired
private Queue queue;
@Autowired
private Topic topic;
@RequestMapping("/sendQueue.do")
public String sendQueue(@RequestParam String str) {
this.sendMessage(this.queue, str);
return "success";
}
@RequestMapping("/sendTopic.do")
public String sendTopic(@RequestParam String str) {
this.sendMessage(this.topic, str);
return "success";
}
private void sendMessage(Destination destination, final String message){
jmsMessagingTemplate.convertAndSend(destination, message);
}
ActiveMQ消费者:
@JmsListener(destination="${spring.activemq.queue-name}", containerFactory="queueListener")
public void readActiveQueue(String message) {
System.out.println("接受到queue模式:" + message);
}
@JmsListener(destination="${spring.activemq.topic-name}", containerFactory="topicListener")
public void readActiveQueue(String message) {
System.out.println("接受到topic模式:" + message);
}