Springboot整合之--RabbitMQ

Springboot整合系列

SpringBoot整合系列
Springboot整合之–mybatis Springboot整合之–Mybatis
Springboot整合之–RabbitMQSpringboot整合之–RabbitMQ
Springboot整合之–RedisSpringboot整合之–Redis

开始整理SpringBoot整合系列的博客。今天开始RabbitMQ整合笔记。RabbitMQ基础知识学习可以参看整理:消息队列之—RabbitMQ

搭建环境:

  • 使用Spring Initializr 快速构建。引入rabbitmq的依赖。
    在这里插入图片描述
  • 配置文件
  # springboot 配置rabbitmq
  rabbitmq:
    host: localhost
    port: 5672
    username:rabbitmqtest1user
    password:rabbitmqtest1user
    virtual-host: /rabbitmqtest1

代码:

  • 生产者代码:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootRabbitmqApplication.class)
public class RabbitMQTest {

    @Autowired 
    //springboot整合rabbitmq使用RabbitTemplate操作.
    private RabbitTemplate rabbitTemplate; 
    

    // topics 动态路由模型
    @Test
    public void topicsProvider() {
        rabbitTemplate.convertSendAndReceive("topicsRouting", "user.save.123"," topics 动态路由模型消息 ");

    }
    // routing 路由模型
    @Test
    public void routingProvider() {
        rabbitTemplate.convertSendAndReceive("directRouting", "error"," routing 路由 模型消息 ");

    }

    // fanout 广播模型
    @Test
    public void fanoutProvider() {
        rabbitTemplate.convertSendAndReceive("logsExchange", ""," fanout 模型消息 ");

    }

    // work queue
    @Test
    public void workProvider() {
        for (int i = 0; i < 10; i++) {
            rabbitTemplate.convertSendAndReceive("workqueue", i + " <--WorkQueue 模型消息");
        }
    }

    //hello world
    @Test
    public void test1() {
        //此时不会创建队列的
        rabbitTemplate.convertAndSend("helloworld", "hello world模式1使用rabbitTemplate发送的消息");
    }
}
RabbitMQ模式1:helloworld 直联模式
  • 消费者代码:
@Component
@RabbitListener(queuesToDeclare = @Queue(value = "helloworld",durable = "true",autoDelete = "false"))
public class HelloConsumer {

    @RabbitHandler
    public void receiveMessage(String message) {
        System.out.println("message--> "+message);
    }
}
RabbitMQ模式2:workqueue 工作队列模式
  • 消费者代码
@Component
public class WorkConsumer {

    //消费者1
    @RabbitListener(queuesToDeclare = @Queue("workqueue"))
    public void workConsumer(String message) {
        System.out.println("消费者1--> " + message);
    }

    //消费者2
    @RabbitListener(queuesToDeclare = @Queue("workqueue"))
    public void workConsumer2(String message) {
        System.out.println("消费者2--> " + message);
    }
}
RabbitMQ模式3: fanout 扇出、广播模式
  • 消费者代码
@Component
public class FanoutConsumer {

    @RabbitListener(bindings = {@QueueBinding(
            value = @Queue,//创建临时队列
            exchange = @Exchange(value = "logsExchange", type = "fanout")
    )
    })
    public void receiverMessage(String message) {
        System.out.println("message1 ->" + message);
    }

    @RabbitListener(bindings = {@QueueBinding(
            value = @Queue,//创建临时队列
            exchange = @Exchange(value = "logsExchange", type = "fanout")
    )
    })
    public void receiverMessage2(String message) {
        System.out.println("message2 ->" + message);
    }
}
RabbitMQ模式4: routing 路由模式
  • 消费者代码:
@Component
public class RoutDirectConsumer {

    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue,//临时队列
                    exchange = @Exchange(value = "directRouting",type = "direct"),//定义交换机的名称和类型
                    key = {"info","error","debug"}//指定监听的路由key

            )
    })
    public void routingReceiver(String message){
        System.out.println("消费者1路由模型--> " +message);

    }
    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue,//临时队列
                    exchange = @Exchange(value = "directRouting",type = "direct"),//定义交换机的名称和类型
                    key = {"error"}//指定监听的路由key

            )
    })
    public void routingReceiver2(String message){
        System.out.println("消费者2路由模型--> " +message);

    }
}
整合模式5: topics 动态路由模式
  • 消费者代码:
@Component
public class TopicConsumer {

    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue,
                    exchange = @Exchange(name = "topicsRouting",type = "topic"),
                    key = {"user.*","user.#"}
            )
    })
    public void getMessage(String message) {
        System.out.println("基于动态路由的消费者1--> " + message);
    }
    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue,
                    exchange = @Exchange(name = "topicsRouting",type = "topic"),
                    key = {"user.*"}
            )
    })
    public void getMessage2(String message) {
        System.out.println("基于动态路由的消费者2--> " + message);
    }
}

MQ应用场景

  • 异步处理
  • 应用解耦
  • 流量削峰
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

benboerdong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值