96SEO 2026-02-19 10:00 17
2、全局唯一IDRedis解决消息幂等性问题2.1、application.yml配置文件2.2、生产者发送消息2.3、消费者接收消息2.4、pom.xml引入依赖2.5、RabbitConfig配置类2.6、启动类2.7、订单对象2.8、测试

https://blog.csdn.net/weixin_63267801/article/details/134211065
对于一个资源不管你请求一次还是请求多次对该资源本身造成的影响应该是相同的不能因为重复的请求而对该资源重复造成影响。
同一个消息第一次接收正常处理业务如果该消息第二次再接收那就不能再处理业务否则就处理重复了。
rabbit_13_idempotent01_redisrabbitmq:host:
truelistener:simple:acknowledge-mode:
exchange.idempotent.01queueName:
使用com.fasterxml.jackson.databind.ObjectMapper对象进行数据序列化与反序列化
com.fasterxml.jackson.core.JsonProcessingException;
com.fasterxml.jackson.databind.ObjectMapper;
org.springframework.amqp.core.Message;
org.springframework.amqp.core.MessageBuilder;
org.springframework.amqp.core.MessageDeliveryMode;
org.springframework.amqp.core.MessageProperties;
org.springframework.amqp.rabbit.core.RabbitTemplate;
org.springframework.context.annotation.Bean;
org.springframework.stereotype.Service;import
javax.annotation.PostConstruct;
rabbitTemplate;//这个对象可以进行序列化和反序列化json格式Resourceprivate
objectMapper;//构造方法执行后执行PostConstructpublic
init(){//开启生产者的确认模式rabbitTemplate.setConfirmCallback((correlationData,
{//如果交换机接收消息成功ack返回trueif(!ack){log.error(消息没有到达交换机原因是{},cause);//TODO
Orders.builder().orderId(order_100).orderName(手机).money(new
BigDecimal(2345)).orderTime(new
Date()).build();//将对象转换成jsonlog.info(orders1:::::
objectMapper.writeValueAsString(orders1);log.info(strOrders1:::::
MessageProperties();//设置单条消息持久化默认技术持久化的messageProperties.setDeliveryMode(MessageDeliveryMode.PERSISTENT);Message
MessageBuilder.withBody(strOrders1.getBytes()).andProperties(messageProperties).build();rabbitTemplate.convertAndSend(exchange.idempotent.01,
Orders.builder().orderId(order_100).orderName(手机).money(new
BigDecimal(2345)).orderTime(new
objectMapper.writeValueAsString(orders2);MessageProperties
MessageProperties();//设置单条消息持久化默认技术持久化的messageProperties.setDeliveryMode(MessageDeliveryMode.PERSISTENT);Message
MessageBuilder.withBody(strOrders2.getBytes()).andProperties(messageProperties).build();rabbitTemplate.convertAndSend(exchange.idempotent.01,
message);}log.info(消息发送完毕发送时间是new
com.fasterxml.jackson.databind.ObjectMapper;
org.springframework.amqp.core.Message;
org.springframework.amqp.rabbit.annotation.RabbitListener;
org.springframework.data.redis.core.StringRedisTemplate;
org.springframework.stereotype.Component;import
stringRedisTemplate;RabbitListener(queues
message.getMessageProperties().getDeliveryTag();//使用objectMapper把字节数组反序列化成对象Orders
objectMapper.readValue(message.getBody(),
Orders.class);try{log.info(接收到的消息为{},orders.toString());//如果不存在就在redis中存储Boolean
stringRedisTemplate.opsForValue().setIfAbsent(idempotent:
orders.getOrderId());if(setResult){//TODO
向数据插入订单数据log.info(向数据库插入订单);}//手动确认接收消息成功channel.basicAck(deliveryTag,false);}catch
{channel.basicNack(deliveryTag,false,true);}
xmlnshttp://maven.apache.org/POM/4.0.0
xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.power/groupIdartifactIdrabbit_13_idempotent01_redis/artifactIdversion1.0-SNAPSHOT/versionnamerabbit_13_idempotent01_redis/namepropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.6.13/versionrelativePath//parentdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.24/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-amqp/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project2.5、RabbitConfig配置类
org.springframework.amqp.core.*;
org.springframework.beans.factory.annotation.Value;
org.springframework.context.annotation.Bean;
org.springframework.context.annotation.Configuration;Configuration
{Value(${my.exchangeName})private
exchangeName;Value(${my.queueName})private
ExchangeBuilder.directExchange(exchangeName).build();}//创建队列Beanpublic
QueueBuilder.durable(queueName).build();}Beanpublic
BindingBuilder.bind(queue).to(directExchange).with(info);}
org.springframework.boot.ApplicationArguments;
org.springframework.boot.ApplicationRunner;
org.springframework.boot.SpringApplication;
org.springframework.boot.autoconfigure.SpringBootApplication;import
javax.annotation.Resource;SpringBootApplication
{SpringApplication.run(Application.class);}Overridepublic
lombok.NoArgsConstructor;import
两笔消息订单ID相同但是消费者只把接收到的一条消息插入了数据库实现了消息幂等性。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback