当前位置:首页 > 社会 >

淘宝怎么设置确认收货(淘宝设置确认收货地址)

来源:原点资讯(www.yd166.com)时间:2024-04-22 02:13:11作者:YD166手机阅读>>

目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如:

  • 淘宝七天自动确认收货。在我们签收商品后,物流系统会在七天后延时发送一个消息给支付系统,通知支付系统将款打给商家,这个过程持续七天,就是使用了消息中间件的延迟推送功能。
  • 12306 购票支付确认页面。我们在选好票点击确定跳转的页面中往往都会有倒计时,代表着 30 分钟内订单不确认的话将会自动取消订单。其实在下订单那一刻开始购票业务系统就会发送一个延时消息给订单系统,延时30分钟,告诉订单系统订单未完成,如果我们在30分钟内完成了订单,则可以通过逻辑代码判断来忽略掉收到的消息。

在上面两种场景中,如果我们使用下面两种传统解决方案无疑大大降低了系统的整体性能和吞吐量:

  • 使用 redis 给订单设置过期时间,最后通过判断 redis 中是否还有该订单来决定订单是否已经完成。这种解决方案相较于消息的延迟推送性能较低,因为我们知道 redis 都是存储于内存中,我们遇到恶意下单或者刷单的将会给内存带来巨大压力。
  • 使用传统的数据库轮询来判断数据库表中订单的状态,这无疑增加了IO次数,性能极低。
  • 使用 jvm 原生的 DelayQueue ,也是大量占用内存,而且没有持久化策略,系统宕机或者重启都会丢失订单信息。
消息延迟推送的实现

在 RabbitMQ 3.6.x 之前我们一般采用死信队列 TTL过期时间来实现延迟队列,我们这里不做过多介绍。

在 RabbitMQ 3.6.x 开始,RabbitMQ 官方提供了延迟队列的插件,可以下载放置到 RabbitMQ 根目录下的 plugins 下。

淘宝怎么设置确认收货,淘宝设置确认收货地址(1)

图片

首先我们创建交换机和消息队列,application.properties 中配置与上一篇文章相同。

import org.springframework.aMQp.core.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.HashMap; import java.util.Map; @Configuration public class MQConfig { public static final String LAZY_EXCHANGE = "Ex.LazyExchange"; public static final String LAZY_QUEUE = "MQ.LazyQueue"; public static final String LAZY_KEY = "lazy.#"; @Bean public TopicExchange lazyExchange(){ //Map<String, Object> pros = new HashMap<>(); //设置交换机支持延迟消息推送 //pros.put("x-delayed-message", "topic"); TopicExchange exchange = new TopicExchange(LAZY_EXCHANGE, true, false, pros); exchange.setDelayed(true); return exchange; } @Bean public Queue lazyQueue(){ return new Queue(LAZY_QUEUE, true); } @Bean public Binding lazyBinding(){ return BindingBuilder.bind(lazyQueue()).to(lazyExchange()).with(LAZY_KEY); } }

我们在 Exchange 的声明中可以设置exchange.setDelayed(true)来开启延迟队列,也可以设置为以下内容传入交换机声明的方法中,因为第一种方式的底层就是通过这种方式来实现的。

//Map<String, Object> pros = new HashMap<>(); //设置交换机支持延迟消息推送 //pros.put("x-delayed-message", "topic"); TopicExchange exchange = new TopicExchange(LAZY_EXCHANGE, true, false, pros);

发送消息时我们需要指定延迟推送的时间,我们这里在发送消息的方法中传入参数 new MessagePostProcessor() 是为了获得 Message对象,因为需要借助 Message对象的api 来设置延迟时间。

import com.anqi.mq.config.MQConfig; import org.springframework.amqp.AmqpException; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageDeliveryMode; import org.springframework.amqp.core.MessagePostProcessor; import org.springframework.amqp.rabbit.connection.CorrelationData; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Date; @Component public class MQSender { @Autowired private RabbitTemplate rabbitTemplate; //ConfirmCallback returnCallback 代码省略,请参照上一篇 public void sendLazy(Object message){ rabbitTemplate.setMandatory(true); rabbitTemplate.setConfirmCallback(confirmCallback); rabbitTemplate.setReturnCallback(returnCallback); //id 时间戳 全局唯一 CorrelationData correlationData = new CorrelationData("12345678909" new Date()); //发送消息时指定 header 延迟时间 rabbitTemplate.convertAndSend(MQConfig.LAZY_EXCHANGE, "lazy.boot", message, new MessagePostProcessor() { @Override public Message postProcessMessage(Message message) throws AmqpException { //设置消息持久化 message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT); //message.getMessageProperties().setHeader("x-delay", "6000"); message.getMessageProperties().setDelay(6000); return message; } }, correlationData); } }

我们可以观察 setDelay(Integer i)底层代码,也是在 header 中设置 x-delay。等同于我们手动设置 header

message.getMessageProperties().setHeader("x-delay", "6000"); /** * Set the x-delay header. * @param delay the delay. * @since 1.6 */ public void setDelay(Integer delay) { if (delay == null || delay < 0) { this.headers.remove(X_DELAY); } else { this.headers.put(X_DELAY, delay); } }

消费端进行消费

import com.rabbitmq.client.Channel; import org.springframework.amqp.rabbit.annotation.*; import org.springframework.amqp.support.AmqpHeaders; import org.springframework.stereotype.Component; import java.io.IOException; import java.util.Map; @Component public class MQReceiver { @RabbitListener(queues = "MQ.LazyQueue") @RabbitHandler public void onLazyMessage(Message msg, Channel channel) throws IOException{ long deliveryTag = msg.getMessageProperties().getDeliveryTag(); channel.basicAck(deliveryTag, true); System.out.println("lazy receive " new String(msg.getBody())); } ``` ## 测试结果[#](https://www.cnblogs.com/haixiang/p/10966985.html#3724420099) ```java import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @SpringBootTest @RunWith(SpringRunner.class) public class MQSenderTest { @Autowired private MQSender mqSender; @Test public void sendLazy() throws Exception { String msg = "hello spring boot"; mqSender.sendLazy(msg ":"); } }

果然在 6 秒后收到了消息 lazy receive hello spring boot:

,

栏目热文

淘宝怎么自行确认收货的(淘宝怎么才算确认收货)

淘宝怎么自行确认收货的(淘宝怎么才算确认收货)

为了能够更好的做好淘宝虚拟发货的服务,不少淘宝卖家也是花费了不少的心思,那么大家是否了解淘宝虚拟发货到底会不会自动收货呢...

2024-04-22 01:41:21查看全文 >>

中秋节放假时间怎么安排(中秋节什么时间放假)

中秋节放假时间怎么安排(中秋节什么时间放假)

注意不调休的假期快要来啦根据国务院办公厅通知端午节放假安排如下:6月10日(星期一)端午节当天放假与周末相连共3天因此今...

2024-04-22 01:39:42查看全文 >>

中秋节放假日期调整通知(今日中秋节放假时间)

中秋节放假日期调整通知(今日中秋节放假时间)

今年最后一个长假连放8天假但节后至少要连上7天班中秋节、国庆节放假调休日期具体安排如下今年中秋国庆假期“合体”9月29日...

2024-04-22 02:02:32查看全文 >>

中秋节放假时间安排图(中秋节放假具体时间)

中秋节放假时间安排图(中秋节放假具体时间)

来源:杭州日报 今天是5月4日,五四青年节。 根据 《全国年节及纪念日放假办法》规定, 青年节(5月4日),14周岁至2...

2024-04-22 01:59:53查看全文 >>

中秋节为什么不调休(今年中秋节为什么不放假)

中秋节为什么不调休(今年中秋节为什么不放假)

对于五一的调休放假,受到了广大民众的吐槽。这事也是难为了假日办,毕竟五月一号是星期三,确实是上不着天,下不着地。如果不调...

2024-04-22 02:01:39查看全文 >>

淘宝确认收货在哪里(淘宝怎么自己确认收货了)

淘宝确认收货在哪里(淘宝怎么自己确认收货了)

3月2日消息,支付宝今日在微博发布一则倡议书,号召大家在收到货后,满意的情况下尽快点击“确认收货”,这样淘宝商家,尤其是...

2024-04-22 01:29:11查看全文 >>

淘宝需要确认收货吗(淘宝如何直接确认收货)

淘宝需要确认收货吗(淘宝如何直接确认收货)

双11前夕,一封联合了17个义乌小商家协会的倡议书引发热议,这份倡议书呼吁消费者,购买东西之后能够主动确认收货,从而缩短...

2024-04-22 02:01:07查看全文 >>

淘宝没发货怎么确认收货(淘宝没发货自动确认收货了怎么办)

淘宝没发货怎么确认收货(淘宝没发货自动确认收货了怎么办)

最新的2019年双十一刚刚结束,剩下的就行小伙伴们等待包裹的过程,最迟多久发货呢,感兴趣的小伙伴就跟随小编一起来看看吧。...

2024-04-22 01:26:35查看全文 >>

淘宝自动确认收货时间是怎么算的(淘宝自动确认收货是10天还是15天)

淘宝自动确认收货时间是怎么算的(淘宝自动确认收货是10天还是15天)

售后类型基本可以分为四种情况:仅退款(未收到货)、退货退款(已收到货)、换货、补寄。这篇文章仅讨论退货退款的情况,我将从...

2024-04-22 02:05:43查看全文 >>

变速齿轮使用教程图解(变速器小齿轮怎么安装视频)

变速齿轮使用教程图解(变速器小齿轮怎么安装视频)

JavaScript奇淫技巧:变速齿轮在PC时代,曾有个名为“变速齿轮”的神奇软件,可以加快或减慢系统时间。当时常用来修...

2024-04-22 01:59:27查看全文 >>

文档排行