前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot整合RabbitMQ 实现五种消息模型

SpringBoot整合RabbitMQ 实现五种消息模型

作者头像
后端码匠
发布2021-02-20 09:54:22
7270
发布2021-02-20 09:54:22
举报
文章被收录于专栏:后端码匠

SpringBoot中使用RabbitMQ

搭建初始环境

引入依赖

代码语言:javascript
复制
    <!-- 引入 rabbitmq 集成依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>

配置配置文件

代码语言:javascript
复制
server:
  port: 9090

spring:
  application:
    # 微服务系统有意义, 养成好习惯, 先写出来
    name: rabbitmq-02-springboot
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: codingce
    password: 123456
    virtual-host: /codingce

测试类 注入 rabbitTemplate

代码语言:javascript
复制
    // 注入 rabbitTemplate
    @Autowired
    private RabbitTemplate rabbitTemplate;

消息队列RabbitMQ之五种消息模型

第一种直连模型使用

开发生产者
代码语言:javascript
复制
    /**
     * 直连
     */
    @Test
    void contextLoads() {
        rabbitTemplate.convertAndSend("hello", "hello word");
    }
开发消费者
代码语言:javascript
复制
/**
 * @author mxz
 */
@Component
@RabbitListener(queuesToDeclare = @Queue("hello"))
public class HelloCustomer {

    /**
     * @param message
     */
    @RabbitHandler
    public void receivel(String message) {
        System.out.println("message: " + message);
    }

}

第二种work模型使用

开发生产者
代码语言:javascript
复制
    /**
     * work
     */
    @Test
    void testWork() {
        for (int i = 0; i < 10; i++) {
            rabbitTemplate.convertAndSend("work", "work模型");
        }
    }
开发消费者
代码语言:javascript
复制
/**
 * 第二种模型 work 模型
 *
 * @author mxz
 */
@Component
public class WorkCustomer {
    /**
     * 第1个消费者
     *
     * @param message
     */
    @RabbitListener(queuesToDeclare = @Queue("work"))
    public void receivel(String message) {
        System.out.println("message1 = " + message);
    }

    /**
     * 第2个消费者
     *
     * @param message
     */
    @RabbitListener(queuesToDeclare = @Queue("work"))
    public void receivel2(String message) {
        System.out.println("message2 = " + message);
    }
}

第三种 Fanout 广播模型

开发生产者
代码语言:javascript
复制
    /**
     * fanout 广播
     */
    @Test
    void testFanout() {
        rabbitTemplate.convertAndSend("logs", "", "Fanout模型发送的消息");
    }
开发消费者
代码语言:javascript
复制
/**
 * fanout
 *
 * @author mxz
 */
@Component
public class FanoutCustomer {

    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue,  // 创建临时队列
                    exchange = @Exchange(value = "logs", type = "fanout")     // 绑定的交换机
            )
    })
    public void receivel(String message) {
        System.out.println("message1 = " + message);
    }

    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue,  // 创建临时队列
                    exchange = @Exchange(value = "logs", type = "fanout")     // 绑定的交换机
            )
    })
    public void receive2(String message) {
        System.out.println("message2 = " + message);
    }
}

第四种 Route 路由模型

开发生产者
代码语言:javascript
复制
    /**
     * route 路由
     */
    @Test
    void testRoute() {
        // exchange 交换机名称
        rabbitTemplate.convertAndSend("directs", "info", "info的key的路由消息");
    }
开发消费者
代码语言:javascript
复制
/**
 * @author mxz
 */
@Component
public class RouteCustomer {

    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue, // 绑定临时队列
                    exchange = @Exchange(value = "directs", type = "direct"), // 自定义交换机名称和类型
                    key = {"info", "error", "warn"}
            )
    })
    public void receivel(String message) {
        System.out.println("message1 = " + message);
    }

    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue, // 绑定临时队列
                    exchange = @Exchange(value = "directs", type = "direct"), // 自定义交换机名称和类型
                    key = {"error"}
            )
    })
    public void receivel2(String message) {
        System.out.println("message1 = " + message);
    }

}

第五种 Topic 订阅模型(动态路由模型)

开发生产者
代码语言:javascript
复制
    /**
     * topic 订阅模式 动态路由
     */
    @Test
    void testTopic() {
        rabbitTemplate.convertAndSend("topics", "user.save", "user.save 路由消息");
    }
开发消费者
代码语言:javascript
复制
/**
 * 订阅模型
 *
 * @author mxz
 */
@Component
public class TopicCustomer {

    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue,
                    exchange = @Exchange(type = "topic", name = "topics"),
                    key = {"user.save", "user.*"}
            )
    }
    )
    public void receivel(String message) {
        System.out.println("message1" + message);
    }

    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue,
                    exchange = @Exchange(type = "topic", name = "topics"),
                    key = {"produce.#", "order.#"}
            )
    }
    )
    public void receivel2(String message) {
        System.out.println("message2" + message);
    }
}

文章已上传gitee https://gitee.com/codingce/hexo-blog 项目地址github: https://github.com/xzMhehe/codingce-java

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端码匠 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 搭建初始环境
    • 引入依赖
      • 配置配置文件
        • 测试类 注入 rabbitTemplate
        • 消息队列RabbitMQ之五种消息模型
          • 第一种直连模型使用
            • 开发生产者
            • 开发消费者
          • 第二种work模型使用
            • 开发生产者
            • 开发消费者
          • 第三种 Fanout 广播模型
            • 开发生产者
            • 开发消费者
          • 第四种 Route 路由模型
            • 开发生产者
            • 开发消费者
          • 第五种 Topic 订阅模型(动态路由模型)
            • 开发生产者
            • 开发消费者
        相关产品与服务
        消息队列 CMQ
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档