Docker下安装RabbitMQ镜像
[root@localhost admin]# docker pull rabbitmq:management
查看已安装的镜像
[root@localhost admin]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/rabbitmq management 64a1f920fb0d 5 days ago 187 MB
docker.io/redis latest 50541622f4f1 2 weeks ago 104 MB
启动镜像,‐d:后台运行 ;‐p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口 5672通信端口,15772管理界面使用的端口;--name:为容器起一个别名
64a1f920f镜像ID
[root@localhost admin]# docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq 64a1f920fb0d
a90fbaa3a95bdd44ee0e739383bf905e05e647fbd8949a171b2781f5cb3a3e4f
启动完后可以在浏览器地址栏输入服务器ip地址:15672,即可访问RabbitMQ管理界面,账号密码都为:guest。
管理界面可以实现创建交换器、队列,绑定等操作。
安装RabbitMQ完毕创建SpringBoot项目。
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
添加配置
spring.rabbitmq.host=主机地址
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
#默认5672
spring.rabbitmq.port=5672
测试类里注入RabbitTemplate
@Autowired
RabbitTemplate rabbitTemplate;
测试单播
/**
* 1、单播(点对点)
*/
@Test
void contextLoads() {
//Message需要自己构造一个;定义消息体内容和消息头
//rabbitTemplate.send(exchage,routeKey,message);
//object默认当成消息体,只需要传入要发送的对象,自动序列化发送给rabbitmq;
//rabbitTemplate.convertAndSend(exchage,routeKey,object);
Map<String, Object> map = new HashMap<>();
map.put("msg", "这是第二个消息");
map.put("data", Arrays.asList("helloWorld",123,true));
// 对象被默认序列化以后发送出去
rabbitTemplate.convertAndSend("exchange.direct","test.news", new Book("红楼梦", "曹雪芹"));
}
测试广播
/**
* 广播
*/
@Test
public void sendMsg() {
rabbitTemplate.convertAndSend("exchange.fanout","", new Book("西游记","吴承恩"));
}
运行测试后可到管理界面查看,也可以使用监听注解获取消息。监听需要在启动类开启基于注解的RabbitMQ模式,即在启动类添加@EnableRabbit注解,再创建service,启动项目,即可获取队列里的消息
@Service
public class BookService {
@RabbitListener(queues = "test.news")
public void receive(Book book) {
System.out.println("收到消息:" + book);
}
@RabbitListener(queues = "test.news")
public void receive02(Message message) {
System.out.println(message.getBody());
System.out.println(message.getMessageProperties());
}
}