简介
-
消息代理 message broker
- 发送者,发送后,有消息代理接管。
- 消息代理 保证消息 传递到 指定的 目的地。
-
目的地 destination
异步消息 两种形式
- 队列 queue 和 主题 topic
-
点对点 消息通信,
-
发布/订阅式 publish / subscribe
-
JMS java Message Service
- Active MQ
- hornet Q
AMQP Advanced Message Queuing Protocol
- 高级 消息 队列 协议
- 兼容 JMS,跨平台
- Rabbit Mq
- 是消息服务器,有 mqtt插件
Mqtt Message Queuing Telemetry Transport
- 消息 队列 遥测 传输
- 小设备 设计
JMS
docker启动 和 测试
docker pull wnameless/oracle-xe-11g
docker pull cloudesire/activemq
ocker run -d -p 61616:61616 -p 8161:8161 cloudesire/activemq
# 61616 是消息代理端口
http://192.168.44.146:8161/
管理员账号密码为:admin/admmin
pom引入 和配置
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
</dependency>
//内嵌到程序里:引入 activemq-broker
@EnableJms //默认开启
spring.activemq.broker-url=tcp://192.168.31.183:61616
消息定义 和 目的地
public class Msg implements MessageCreator{
@Override
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage("测试消息");
}
}
@SpringBootApplication
public class Ch934Application implements CommandLineRunner{ //1
@Autowired
JmsTemplate jmsTemplate; //2
@Override
public void run(String... args) throws Exception {
jmsTemplate.send("my-destination", new Msg()); //3
}
}
接收消息
@Component
public class Receiver {
@JmsListener(destination = "my-destination") //1
public void receiveMessage(String message) {
System.out.println("接受到: <" + message + ">");
}
}
AMQP
- RabbitMQ
docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:3-management
http://192.168.44.146:15672
guest/guest
引入Mq
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
spring.rabbitmq.host=192.168.44.146
定义队列 发送消息
@SpringBootApplication
public class Ch935Application implements CommandLineRunner{
@Autowired
RabbitTemplate rabbitTemplate; //1
public static void main(String[] args) {
SpringApplication.run(Ch935Application.class, args);
}
@Bean //2
public Queue wiselyQueue(){
return new Queue("my-queue");
}
@Override
public void run(String... args) throws Exception {
rabbitTemplate.convertAndSend("my-queue", "来自RabbitMQ的问候"); //3
}
}
接收消息
@Component
public class Receiver {
@RabbitListener(queues = "my-queue")
public void receiveMessage(String message) throws Exception {
System.out.println("Received <" + message + ">");
}
}