引入其他知识进行扩展
1.首先JMS(java Message Service)即java 消息服务,是基于jvm的消息代理的规范,而AcitveMQ,HornetQ是一个JMS代理的实现
AMQP也是一个消息代理的规范,但它不仅兼容JMS,还支持跨平台和语言。AMQP的主要实现是RabbitMQ
2.了解异步消息,队列,主题,点对点式,发布/订阅式
JMS实现过程
1.安装ActiveMQ
(非Docker需要自行下载,Docker如果已经下载ActiveMQ镜像,则运行镜像,注意如果是虚拟机,需要进行端口映射)
2.内嵌ActiveMQ
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
</dependency>
2.配置application.properties
spring.activemq.broker-url=tcp://localhost:61616
实际情况下消息的发布者和接收者是分离的,以下测试放在一个程序里
2.1定义JMS发送的消息需要实现MessageCreator,重写createMessage
public class MessageJms implements MessageCreator{
@Override
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage("你好");
}
}
2.2消息的发送及目的地(队列)
@SpringBootApplication
public class JmsApplication implements CommandLineRunner{
@Autowired
JmsTemplate jmsTemplate;
public static void main(String[] args) {
SpringApplication.run(JmsApplication .class, args);
}
@Override
public void run(String... args) throws Exception {
jmsTemplate.send("my-messge", new Msg());
}
}
2.3消息监听
@Component
public class Receiver {
@JmsListener(destination = "my-messge") //1
public void receiveMessage(String message) {
System.out.println("接受到: <" + message + ">");
}
}
------------------------------------------------------
AMQP
1.安装RabbitMQ
在Docker运行RabbtiMQ镜像,非Docker进行下载安装
Spring boot 默认我们的RabbtiMQ主机为localhost,端口5672,所以无需配置相关信息
2.1发送消息及目的地的定义
@SpringBootApplication
public class AmqpApplication implements CommandLineRunner{
@Autowired
RabbitTemplate rabbitTemplate;
public static void main(String[] args) {
SpringApplication.run(AmqpApplication .class, args);
}
@Bean
public Queue amqQueue(){
return new Queue("amqcout");
}
@Override
public void run(String... args) throws Exception {
rabbitTemplate.convertAndSend("amqcout", "来自RabbitMQ的问候");
}
}
2.2消息监听
@RabbitListener(queues = "amqcout")
public void receiveMessage(String message) {
System.out.println("收到 <" + message + ">");
}