rabbitmq接入

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

config配置

package cn.noncarbon.mobility.base.web.config;

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class RabbitMqUniubiConfig {
    @Value("${spring.rabbitmq.queue-name.uniubi.queue}")
    private String uniubiQueue;
    @Value("${spring.rabbitmq.queue-name.uniubi.key}")
    private String uniubiKey;
    @Value("${spring.rabbitmq.queue-name.uniubi.dead-queue}")
    private String uniubiDeadQueue;

    @Value("${spring.rabbitmq.queue-name.dead-letter.exchange.mobility-base-uniubi}")
    private String deadLetterExchangeUniubi;

    private final String DEAD_LETTER_QUEUE_KEY = "x-dead-letter-exchange";
    private final String EXCHANGE_NAME = "mobility.base.direct";

    @Bean
    public DirectExchange direct() {
        return new DirectExchange(EXCHANGE_NAME);
    }

    @Bean("delayDirectExchange")
    public DirectExchange delayDirectExchange() {
        DirectExchange directExchange = new DirectExchange("mobility.base.direct.delay");
        directExchange.setDelayed(true);
        return directExchange;
    }

    @Bean("deadLetterExchangeUniubi")
    public Exchange deadLetterExchangeUniubi() {
        return ExchangeBuilder.directExchange(deadLetterExchangeUniubi).durable(true).build();
    }

    @Bean("uniubiQueue")
    public Queue uniubiQueue() {
        Map<String, Object> args = new HashMap<>();
        args.put(DEAD_LETTER_QUEUE_KEY, deadLetterExchangeUniubi);
        return new Queue(uniubiQueue, true, false, false, args);
    }

    @Bean("uniubiDeadQueue")
    public Queue uniubiDeadQueue() {
        return new Queue(uniubiDeadQueue);
    }

    @Bean
    public Binding bindingUniubiQueue(DirectExchange direct, @Qualifier("uniubiQueue") Queue uniubiQueue) {
        return BindingBuilder.bind(uniubiQueue).to(direct).with(this.uniubiKey);
    }

    @Bean
    public Binding uniubiDeadLetterBinding() {
        return new Binding(uniubiDeadQueue, Binding.DestinationType.QUEUE, deadLetterExchangeUniubi, this.uniubiKey, null);
    }
}

监听

package cn.noncarbon.mobility.base.web.listener;


import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

import java.io.IOException;

@Slf4j
@Configuration
public class UniubiListener {
    @Autowired
    private RabbitTemplate template;
    @Autowired
    private DirectExchange direct;
    @Value("${spring.rabbitmq.queue-name.uniubi.key}")
    private String uniubiKey;


    @RabbitListener(queues = "#{'${spring.rabbitmq.queue-name.uniubi.queue}'}")
    public void uniubiDataManage(Message message, Channel channel) throws IOException {
        String msg = new String(message.getBody());
        log.info("process growth receive: " + msg);
        // 手动确认应答
        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);

    }
}

发送

package cn.noncarbon.mobility.base.web.controller.outer;


import cn.noncarbon.mobility.base.service.TenantSafetyDeviceService;
import cn.noncarbon.mobility.base.web.controller.BaseController;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import io.swagger.v3.oas.annotations.Operation;

import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;


@Slf4j
@RestController
@RequestMapping("/outer/tenantSafetyDevice")
@Tag(name = "outer-租户的安防设备", description = "outer-租户的安防设备")
public class TenantSafetyDeviceOuterController extends BaseController {

    @Autowired
    private TenantSafetyDeviceService tenantSafetyDeviceService;

    @Autowired
    private RabbitTemplate template;
    @Autowired
    private DirectExchange direct;

    @Value("${spring.rabbitmq.queue-name.uniubi.key}")
    private String uniubiKey;


    /**
     * 接收宇泛出入记录信息
     */
    @Operation(summary = "接收宇泛出入记录信息", description = "接收宇泛出入记录信息")
    @PostMapping("/openDoorMeg")
    public void syncDoorLock(@RequestBody String message) {
        log.info("进来了");
        log.info("message:" + message);
        log.info("结束了");

//        log.info("Touch Off Growth Rule:{}", JSON.toJSONString(growthQueVo));
        //推送mq
        template.convertAndSend(direct.getName(), uniubiKey, message);

    }

}

yml配置

rabbitmq:
    host: 11111112222
    port: 5674
    username: 1111111
    password: 21121212
    listener:
      simple:
        # 并发消费者的初始化值
        concurrency: 1
        # 并发消费者的最大值
        max-concurrency: 5
        # 每个消费者每次监听时可拉取处理的消息数量
        prefetch: 1
        # 手动应答
        acknowledge-mode: manual
        retry:
          # 是否支持重试
          enabled: true
          # 最大重试次数
          max-attempts: 3
          # 重试间隔时间(单位毫秒)
          initial-interval: 5000ms
        # 重试次数超过上面的设置之后是否丢弃(false不丢弃时需要写相应代码将该消息加入死信队列)
        default-requeue-rejected: false
      direct:
        # 每个消费者每次监听时可拉取处理的消息数量
        prefetch: 1
        acknowledge-mode: manual
        retry:
          # 是否支持重试
          enabled: true
          # 最大重试次数
          max-attempts: 3
          # 重试间隔时间(单位毫秒)
          initial-interval: 5000ms
        # 重试次数超过上面的设置之后是否丢弃(false不丢弃时需要写相应代码将该消息加入死信队列)
        default-requeue-rejected: false
    queue-name:
      # 宇泛出入记录数据统一处理队列
      uniubi:
        queue: MOBILITY_BASE_UNIUBI_QUEUE
        key: MOBILITY_BASE_UNIUBI_DEV_KEY
        dead-queue: dead-letter.mobility-base-uniubi.dev
      dead-letter:
        exchange:
          mobility-base-uniubi: mobility.base.dead-letter.dev
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot可以很方便地接入RabbitMQ作为消息队列。下面是一个简单的示例,演示如何在Spring Boot中使用RabbitMQ进行消息队列的操作。 首先,需要在`pom.xml`文件中添加RabbitMQ依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> ``` 接下来,在`application.properties`文件中配置RabbitMQ相关的属性: ```properties spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest ``` 然后,在Spring Boot的主类上使用`@EnableRabbit`注解启用RabbitMQ支持: ```java @EnableRabbit @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } ``` 接着,创建一个消息消费者: ```java @Component public class RabbitMQConsumer { @RabbitListener(queues = "my-queue") public void consume(String message) { // 处理接收到的消息 System.out.println("Received message: " + message); } } ``` 最后,创建一个消息生产者: ```java @Component public class RabbitMQProducer { private final RabbitTemplate rabbitTemplate; public RabbitMQProducer(RabbitTemplate rabbitTemplate) { this.rabbitTemplate = rabbitTemplate; } public void produce(String message) { // 发送消息到指定的queue rabbitTemplate.convertAndSend("my-queue", message); } } ``` 这样,你就可以在Spring Boot中使用RabbitMQ进行消息队列的操作了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值