- 保证消息不丢失,使用事务消息,会导致性能下降250倍,为此需要使用确认机制
- confirmCallback确认模式,从消息生产者到服务器交换机
- returnCallback若交换机未能投递到队列,需要重新回退到交换机内
- 开启发送端确认后
- 如果没有投递成功,消息会被记录和保存的
复制代码 保证消息不丢失,利用事件消息,会导致性能下降250倍,为此需要利用确认机制
confirmCallback确认模式,从消息生产者到服务器交换机
returnCallback若交换机未能投递到队列,需要重新回退到交换机内
开开导送端确认后
如果没有投递成功,消息会被记载和保存的
- spring.application.name=Mall-order
- spring.cloud.nacos.config.server-addr=127.0.0.1:8848
- spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
- spring.rabbitmq.host=192.168.56.10
- spring.rabbitmq.port=5672
- spring.rabbitmq.virtual-host=/
- #只要抵达队列,以异步形式回调
- spring.rabbitmq.template.mandatory=true
- #新版本的发送确认
- spring.rabbitmq.publisher-confirm-type=CORRELATED
- spring.cloud.nacos.config.namespace=becc5563-6c9b-47ff-a6b1-580982722371
复制代码
- spring.application.name=Mall-order
- spring.cloud.nacos.config.server-addr=127.0.0.1:8848
- spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
- spring.rabbitmq.host=192.168.56.10
- spring.rabbitmq.port=5672
- spring.rabbitmq.virtual-host=/
- #只要抵达队列,以异步形式回调
- spring.rabbitmq.template.mandatory=true
- #新版本的发送确认
- spring.rabbitmq.publisher-confirm-type=CORRELATED
- spring.cloud.nacos.config.namespace=becc5563-6c9b-47ff-a6b1-580982722371
复制代码 - package com.alatus.mall.order.controller;
- import com.alatus.mall.order.entity.OrderEntity;
- import com.alatus.mall.order.entity.OrderReturnReasonEntity;
- import org.springframework.amqp.rabbit.core.RabbitTemplate;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RestController;
- import java.util.Date;
- import java.util.UUID;
- @RestController
- public class RabbitController {
- @Autowired
- private RabbitTemplate rabbitTemplate;
- @GetMapping("/sendMessage")
- public String sendMessage(){
- for (int i = 0; i < 10; i++) {
- if(i % 2 == 0){
- OrderReturnReasonEntity reasonEntity = new OrderReturnReasonEntity();
- reasonEntity.setId(1L);
- reasonEntity.setCreateTime(new Date());
- reasonEntity.setName("哈哈"+i);
- rabbitTemplate.convertAndSend("helloWorld","hello",reasonEntity);
- }
- else{
- OrderEntity entity = new OrderEntity();
- entity.setOrderSn(UUID.randomUUID().toString());
- rabbitTemplate.convertAndSend("helloWorld","hello",entity);
- }
- }
- return "OK";
- }
- }
复制代码- package com.alatus.mall.order.controller;
- import com.alatus.mall.order.entity.OrderEntity;
- import com.alatus.mall.order.entity.OrderReturnReasonEntity;
- import org.springframework.amqp.rabbit.core.RabbitTemplate;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RestController;
- import java.util.Date;
- import java.util.UUID;
- @RestController
- public class RabbitController {
- @Autowired
- private RabbitTemplate rabbitTemplate;
- @GetMapping("/sendMessage")
- public String sendMessage(){
- for (int i = 0; i < 10; i++) {
- if(i % 2 == 0){
- OrderReturnReasonEntity reasonEntity = new OrderReturnReasonEntity();
- reasonEntity.setId(1L);
- reasonEntity.setCreateTime(new Date());
- reasonEntity.setName("哈哈"+i);
- rabbitTemplate.convertAndSend("helloWorld","hello",reasonEntity);
- }
- else{
- OrderEntity entity = new OrderEntity();
- entity.setOrderSn(UUID.randomUUID().toString());
- rabbitTemplate.convertAndSend("helloWorld","hello",entity);
- }
- }
- return "OK";
- }
- }
复制代码 - package com.alatus.mall.order.config;
- import org.springframework.amqp.rabbit.connection.CorrelationData;
- import org.springframework.amqp.rabbit.core.RabbitTemplate;
- import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
- import org.springframework.amqp.support.converter.MessageConverter;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import javax.annotation.PostConstruct;
- @Configuration
- public class RabbitConfig {
- @Autowired
- private RabbitTemplate rabbitTemplate;
- @Bean
- public MessageConverter messageConverter(){
- return new Jackson2JsonMessageConverter();
- }
- // 定制RabbitCallback,构造器创建完成,执行此方法
- @PostConstruct
- public void initRabbitTemplate(){
- // 设置确认回调
- rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
- @Override
- public void confirm(CorrelationData correlationData, boolean ack, String cause) {
- System.out.println(""+correlationData+ack+cause);
- }
- });
- }
- }
复制代码
- package com.alatus.mall.order.config;
- import org.springframework.amqp.rabbit.connection.CorrelationData;
- import org.springframework.amqp.rabbit.core.RabbitTemplate;
- import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
- import org.springframework.amqp.support.converter.MessageConverter;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import javax.annotation.PostConstruct;
- @Configuration
- public class RabbitConfig {
- @Autowired
- private RabbitTemplate rabbitTemplate;
- @Bean
- public MessageConverter messageConverter(){
- return new Jackson2JsonMessageConverter();
- }
- // 定制RabbitCallback,构造器创建完成,执行此方法
- @PostConstruct
- public void initRabbitTemplate(){
- // 设置确认回调
- rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
- @Override
- public void confirm(CorrelationData correlationData, boolean ack, String cause) {
- System.out.println(""+correlationData+ack+cause);
- }
- });
- }
- }
复制代码 - package com.alatus.mall.order.service.impl;
- import com.alatus.mall.order.entity.OrderEntity;
- import com.alatus.mall.order.entity.OrderReturnReasonEntity;
- import com.rabbitmq.client.Channel;
- import org.springframework.amqp.core.Message;
- import org.springframework.amqp.rabbit.annotation.RabbitHandler;
- import org.springframework.amqp.rabbit.annotation.RabbitListener;
- import org.springframework.stereotype.Service;
- import java.util.Map;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.alatus.common.utils.PageUtils;
- import com.alatus.common.utils.Query;
- import com.alatus.mall.order.dao.OrderItemDao;
- import com.alatus.mall.order.entity.OrderItemEntity;
- import com.alatus.mall.order.service.OrderItemService;
- @Service("orderItemService")
- @RabbitListener(queues = "helloJava")
- public class OrderItemServiceImpl extends ServiceImpl<OrderItemDao, OrderItemEntity> implements OrderItemService {
- @Override
- public PageUtils queryPage(Map<String, Object> params) {
- IPage<OrderItemEntity> page = this.page(
- new Query<OrderItemEntity>().getPage(params),
- new QueryWrapper<OrderItemEntity>()
- );
- return new PageUtils(page);
- }
- @RabbitHandler
- public void getMessage(Message message, OrderReturnReasonEntity entity, Channel channel){
- System.out.println(entity);
- }
- @RabbitHandler
- public void getMessage1(OrderEntity entity){
- System.out.println(entity);
- }
- }
复制代码- package com.alatus.mall.order.service.impl;
- import com.alatus.mall.order.entity.OrderEntity;
- import com.alatus.mall.order.entity.OrderReturnReasonEntity;
- import com.rabbitmq.client.Channel;
- import org.springframework.amqp.core.Message;
- import org.springframework.amqp.rabbit.annotation.RabbitHandler;
- import org.springframework.amqp.rabbit.annotation.RabbitListener;
- import org.springframework.stereotype.Service;
- import java.util.Map;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.alatus.common.utils.PageUtils;
- import com.alatus.common.utils.Query;
- import com.alatus.mall.order.dao.OrderItemDao;
- import com.alatus.mall.order.entity.OrderItemEntity;
- import com.alatus.mall.order.service.OrderItemService;
- @Service("orderItemService")
- @RabbitListener(queues = "helloJava")
- public class OrderItemServiceImpl extends ServiceImpl<OrderItemDao, OrderItemEntity> implements OrderItemService {
- @Override
- public PageUtils queryPage(Map<String, Object> params) {
- IPage<OrderItemEntity> page = this.page(
- new Query<OrderItemEntity>().getPage(params),
- new QueryWrapper<OrderItemEntity>()
- );
- return new PageUtils(page);
- }
- @RabbitHandler
- public void getMessage(Message message, OrderReturnReasonEntity entity, Channel channel){
- System.out.println(entity);
- }
- @RabbitHandler
- public void getMessage1(OrderEntity entity){
- System.out.println(entity);
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |