SpringBoot整合RabbitMQ案例

 

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());
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值