Srping 整合 RabbitMQ

  1. 引入 ampq 场景启动器 RabbitAutoConfiguration 自动生效

   <!--引入 amqp 场景启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

2-RabbitAutoConfiguration 给容器中自动配置了

* RabbitTemplate、AmqpAdmin、CachingConnectionFactory、RabbitMessagingTemplate 等组件

3- @EnableRabbit 开启rabbit

属性配置

在RabbitProperties 定义

# RabbitMQ配置
spring.rabbitmq.host=192.168.1.152
spring.rabbitmq.port=5672
# 虚拟主机配置
spring.rabbitmq.virtual-host=/
# 开启发送端消息抵达Broker确认
spring.rabbitmq.publisher-confirms=true
# 开启发送端消息抵达Queue确认
spring.rabbitmq.publisher-returns=true
# 只要消息抵达Queue,就会异步发送优先回调returnfirm
spring.rabbitmq.template.mandatory=true
# 手动ack消息,不使用默认的消费端确认
spring.rabbitmq.listener.simple.acknowledge-mode=manual

3-测试类

创建交换机 创建对接 绑定交换机 以及发送消息

/**
   * <简述>创建交换机
   * <详细描述> 1、如何创建Exchange、Queue、Binding
   *      *      1)、使用AmqpAdmin进行创建交换机
   *      *       2、如何收发消息
   * @author syf
   * @date 2023/1/12 17:02
   */
  @Test
    public void createExchange() {
        //名称 , 是否持久化(关机是否删除),是否自动删除
        Exchange directExchange = new DirectExchange("hello-java-exchange",true,false);
        //声明一个交换机
        amqpAdmin.declareExchange(directExchange);
        log.info("Exchange[{}]创建成功:","hello-java-exchange");
    }

    /**
     * <简述>创建队列
     * <详细描述>
     * @author syf
     * @date 2023/1/12 17:06
     */
    @Test
    public void testCreateQueue() {
        //名称,是否持久化,是否排他(排他 不允许其他连接,是否自动删除
        Queue queue = new Queue("hello-java-queue",true,false,false);
        amqpAdmin.declareQueue(queue);
        log.info("Queue[{}]创建成功:","hello-java-queue");
    }

    /**
     * <简述>交换机和队列绑定
     * <详细描述>
     * @author syf
     * @date 2023/1/12 17:09
     */
    @Test
    public void createBinding() {

        Binding binding = new Binding(
                "hello-java-queue", //目的地  队列
                Binding.DestinationType.QUEUE,  //目的地类型 绑定类型 (1- 交换机绑定队列 2-交换机绑定交换机)
                "hello-java-exchange",//交换机
                "hello.java",//路由键
                null);
        amqpAdmin.declareBinding(binding);
        log.info("Binding[{}]创建成功:","hello-java-binding");

    }


    /**
     * <简述>发送消息
     * <详细描述>
     * @author syf
     * @date 2023/1/12 17:13
     */
    @Test
    public void sendMessageTest() {
        OrderReturnReasonEntity reasonEntity = new OrderReturnReasonEntity();
        reasonEntity.setId(1L);
        reasonEntity.setCreateTime(new Date());
        reasonEntity.setName("reason");
        reasonEntity.setStatus(1);
        reasonEntity.setSort(2);
        String msg = "Hello World";
        //1、发送消息,如果发送的消息是个对象,会使用序列化机制,将对象写出去,对象必须实现Serializable接口

        //2、发送的对象类型的消息,可以是一个json
        rabbitTemplate.convertAndSend("hello-java-exchange","hello2.java",
                reasonEntity,new CorrelationData(UUID.randomUUID().toString()));
        log.info("消息发送完成:{}",reasonEntity);
    }

4-序列化发送对象为json ,默认实现是序列化

5-RabbitListener&RabbitHandler

发送信息

@RabbitListener 标注在类上 监听队列

@RabbitHandler 标注处理的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

syfjava

请博主喝杯蜜雪冰城

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

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

打赏作者

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

抵扣说明:

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

余额充值