<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("结束了");
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