mq发送消息一般步骤
<!--消息发送-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
配置
-
spring: rabbitmq: host: 192.168.150.101 # 你的虚拟机IP port: 5672 # 端口 virtual-host: /hmall # 虚拟主机 username: hmall # 用户名 password: 123 # 密码
配置消息转换器——文章末尾
发送者
注入
private final RabbitTemplate rabbitTemplate;
try {
rabbitTemplate.convertAndSend(
"pay.topic" //交换机
, "pay.success" //key
, po.getBizOrderNo()); //消息体
} catch (Exception e) {
log.error("支付成功的消息发送失败,支付单id:{}, 交易单id:{}", po.getId(), po.getBizOrderNo(), e);
}
消费者
-
@Component @RequiredArgsConstructor public class PayStatusListener { private final IOrderService orderService; @RabbitListener(bindings = @QueueBinding( value = @Queue(name = "mark.order.pay.queue", durable = "true"), exchange = @Exchange(name = "pay.topic", type = ExchangeTypes.TOPIC), key = "pay.success" )) public void listenPaySuccess(Long orderId){ orderService.markOrderPaySuccess(orderId); } }
消息后置处理器
这个方法的目的是在消息发送之前对消息进行后处理,具体地,它向消息的属性中添加了一个名为 "user-info" 的头信息,这个头信息的值是通过 UserContext.getUser() 方法获取的当前用户信息。
public class RelyUserInfoMessageProcessor implements MessagePostProcessor {
@Override
public Message postProcessMessage(Message message) throws AmqpException {
message.getMessageProperties().setHeader("user-info", UserContext.getUser());
return message;
}
}
MessagePostProcessor 接口:这个接口是Spring AMQP提供的,用于在消息发送之前对消息进行自定义处理。通过实现这个接口,您可以修改消息的头部、属性、负载等。
消息转换器
在处理发送对象的时候使用 JSON 格式来对信息进行序列化,首先引入依赖
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
👉 配置消息转换器到 ApplicationContext 中,即声明 Bean,可以通过写 Config 类的方式实现,这里直接将声明写到主方法中
发送者
@SpringBootApplication
public class PublisherApplication {
public static void main(String[] args) {
SpringApplication.run(PublisherApplication.class, args);
}
@Bean
public MessageConverter MessageConverter() {
return new Jackson2JsonMessageConverter();
}
}
消费者
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
@Bean
public MessageConverter MessageConverter() {
return new Jackson2JsonMessageConverter();
}
}

浙公网安备 33010602011771号