config
@Slf4j
@Configuration
public class RabbitMqConfig {
@Bean(name = "simpleRabbitListenerContainerFactory")
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
//new Jackson2JsonMessageConverter()
factory.setMessageConverter(new SimpleMessageConverter()); //建议根据头信息自己转换
factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);//签收模式,只跟接受者声明有关
return factory;
}
}
接收端:
@Slf4j
@Component
public class MqHandler {
@Resource
private IMyService myService;
private void ack(Message message, Channel channel) {
try {
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
} catch (IOException e) {
log.error("basicAck error", e);
}
}
@RabbitHandler
@RabbitListener(bindings = {@QueueBinding(value = @Queue(value = "${queue.name}", durable = "true"),
exchange = @Exchange(value = "${exchange.name}", type = "${exchange.type}")
, key = "${routing.key}")}, containerFactory = "simpleRabbitListenerContainerFactory")
public void checkOut(Message message, Channel channel) {
String body = new String(message.getBody(), StandardCharsets.UTF_8);
log.info("mqinfo prop {} \n msg {} ", message.getMessageProperties(), body);
try {
ParamDto paramDto = JsonUtil.from(body, new TypeReference<MyDto>() {
});
RespResult respResult = myService.do(paramDto);
log.info("mq result info {} ", JsonUtil.to(respResult));
} catch (Exception ex) {
log.error("mq checkIn error", ex);
}
this.ack(message, channel);
}
发送端:
@Autowired
private RabbitTemplate rabbitTemplate;
rabbitTemplate.send("exchangeName", "routingKey"
, MqMessage.getMessage(JsonUtil.to(Object.class)));
public static Message getMessage(String object) {
return MessageBuilder.withBody(object.getBytes())
.setContentType(MessageProperties.CONTENT_TYPE_JSON)
.setContentEncoding(StandardCharsets.UTF_8.name())
.setMessageId(UUID.randomUUID().toString())
.build();
}