SEO技术

SEO技术

Products

当前位置:首页 > SEO技术 >

如何解决打印错误导致网站搜索功能失效的问题?

96SEO 2026-02-19 16:31 0


Spring

的生产和消费功能在公司内部微服务项目中大量使用了该框架以下是个人的一些记录。

如何解决打印错误导致网站搜索功能失效的问题?

java

是一个分布式流处理平台广泛用于构建实时数据管道和流应用程序。

它具有以下几个关键功能

发布和订阅记录流类似于消息队列或企业消息传递系统。

存储记录流存储数据流容错。

处理记录流实时或批处理方式处理数据流。

Spring

KafkaListener用于消费消息的注解支持自动并发和分区分配。

KafkaMessageListenerContainer低级别的消息监听容器提供了更大的灵活性。

事务支持支持与

作为微服务之间的消息传递中介。

实时数据处理处理流式数据如日志收集、监控和分析。

事件溯源使用Kafka

记录所有事件支持事件溯源和审计。

数据集成连接不同的数据源和目标系统实现数据集成和同步。

二、如何使用进行消息消费

dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.kafka/groupIdartifactIdspring-kafka/artifactId/dependency2.

配置文件

jdbc:mysql://localhost:3306/testusername:

rootpassword:

开启事务管理transaction:management:enabled:

localhost:9092#

消费监听接口监听的主题不存在时默认会报错listener:missing-topics-fatal:

eventsproducer:#

当retris为0时produce不会重复。

retirs重发此时repli节点完全成为leader节点不会产生消息丢失。

retries:

0#procedure要求leader在考虑完成请求之前收到的确认数用于控制发送记录在服务端的持久化其值可以为如下#acks

如果设置为零则生产者将不会等待来自服务器的任何确认该记录将立即添加到套接字缓冲区并视为已发送。

在这种情况下无法保证服务器已收到记录并且重试配置将不会生效因为客户端通常不会知道任何故障为每条记录返回的偏移量始终设置为-1。

#acks

这意味着leader会将记录写入其本地日志但无需等待所有副本服务器的完全确认即可做出回应在这种情况下如果leader在确认记录后立即失败但在将数据复制到所有的副本服务器之前则记录将会丢失。

#acks

all

这意味着leader将等待完整的同步副本集以确认记录这保证了只要至少一个同步副本服务器仍然存活记录就不会丢失这是最强有力的保证这相当于acks

-1,

指定消息key和消息体的编解码方式key-serializer:

org.apache.kafka.common.serialization.StringSerializervalue-serializer:

org.apache.kafka.common.serialization.StringSerializer#

每次批量发送消息的数量,produce积累到一定数据一次发送#batch-size:

16384#

produce积累数据一次发送缓存大小达到buffer.memory就发送数据#buffer-memory:

33554432consumer:#

由于在kafka中同一组中的consumer不会读取到同一个消息依靠groud.id设置组名group-id:

events-group-1#

smallest和largest才有效如果smallest重新0开始读取如果是largest从logfile的offset读取。

一般情况下我们都是设置smallestauto-offset-reset:

earliest#

设置自动提交offsetenable-auto-commit:

true#如果enable.auto.commit为true则消费者偏移自动提交给Kafka的频率以毫秒为单位默认值为5000。

auto-commit-interval:

100#

指定消息key和消息体的编解码方式key-deserializer:

org.apache.kafka.common.serialization.StringDeserializervalue-deserializer:

org.apache.kafka.common.serialization.StringDeserializerproperties:spring.json.value.default.type:

配置消费主题和消费者组2

创建一个Kafka消费者工厂用于生产特定配置的Kafka消费者。

*

param

ConcurrentKafkaListenerContainerFactoryString,

Event

kafkaListenerContainerFactory(ConsumerFactoryString,

Event

{ConcurrentKafkaListenerContainerFactoryString,

Event

ConcurrentKafkaListenerContainerFactory();factory.setConsumerFactory(consumerFactory);log.info(KafkaListenerContainerFactory

created.);return

创建一个Kafka消费者工厂用于生产特定配置的Kafka消费者。

*

这个方法的主要作用是配置消费者的各项参数包括连接服务器、消费者组ID、序列化器等*

return

返回一个配置好的消费者工厂用于创建字符串键和Event值的消费者实例。

*/Beanpublic

Event

初始化配置属性映射用于设置消费者的配置参数。

MapString,

Object

配置Kafka服务器的连接地址和端口。

configProps.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,

localhost:9092);//

配置消费者的组ID用于标识消费者属于哪个消费组。

configProps.put(ConsumerConfig.GROUP_ID_CONFIG,

events-group);//

配置键和值的反序列化器这里使用StringDeserializer和JsonDeserializer。

//

StringDeserializer用于反序列化键JsonDeserializer用于反序列化值并且信任所有包设置默认值类型为Event类。

configProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,

StringDeserializer.class);configProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,

JsonDeserializer.class);configProps.put(JsonDeserializer.TRUSTED_PACKAGES,

*);configProps.put(JsonDeserializer.VALUE_DEFAULT_TYPE,

Event.class);//

使用配置属性映射创建并返回一个默认的Kafka消费者工厂。

return

new

DefaultKafkaConsumerFactory(configProps);}

Boot应用程序中使用

topic;Value(${kafka.group-2})public

String

topic,消费者组这里消费者组可以覆盖消费者工厂中配置的消费者组**

param

{System.out.println([event-listener]

consumed

以上不同的写法都可以根据需要可以直接写消费者相关信息也可以通过配置文件变量等方式获取选择适合自己的即可。

一般用配置变量的方式。

springboot项目然后发送消息即可查看消息是否已经消费到了。

三、如何控制消费者启动和暂停

来控制监听器是否在启动的时候开始进行消费监听当然这种方式不够灵活我们可以写一个接口在需要的时候进行启动和暂停以下是个示例。

编写控制器

com.tan.kafka.service.KafkaListenerControlService;

import

org.springframework.beans.factory.annotation.Autowired;

import

org.springframework.web.bind.annotation.PostMapping;

import

org.springframework.web.bind.annotation.RequestMapping;

import

org.springframework.web.bind.annotation.RestController;/***

Description

kafkaListenerControlService;PostMapping(/pause)public

String

{kafkaListenerControlService.pauseListener();return

Paused;}PostMapping(/resume)public

String

{kafkaListenerControlService.resumeListener();return

Resumed;}

kafkaListenerEndpointRegistry;PostConstructpublic

void

{log.info(KafkaListenerControlService.checkListeners);for

(String

kafkaListenerEndpointRegistry.getListenerContainerIds())

container

kafkaListenerEndpointRegistry.getListenerContainer(listenerId);if

(container

本方法旨在提供一种方式来暂停应用程序中特定的Kafka监听器。

这可能在需要临时停止处理新消息*

这里使用

KafkaListenerEndpointRegistry#getListenerContainer(String)

see

MessageListenerContainer#pause()

void

通过监听器端点注册表获取名为eventListener的监听器容器MessageListenerContainer

container

kafkaListenerEndpointRegistry.getListenerContainer(eventListener);//

(container

{container.pause();log.info(Paused

Kafka

container.getListenerId());}}/***

它首先从注册表中获取名为eventListener的监听器容器*

然后检查容器是否为空。

如果容器存在则调用其resume方法来恢复监听器的运行。

*

see

KafkaListenerEndpointRegistry#getListenerContainer(String)*

see

MessageListenerContainer#resume()*/public

void

从注册表中获取名为eventListener的监听器容器MessageListenerContainer

container

kafkaListenerEndpointRegistry.getListenerContainer(eventListener);//

(container

记录恢复操作的信息包括监听器的IDlog.info(Resumed

Kafka

http://localhost:8080/kafka/resume

--header

如果pauseListener()方法被多个线程同时访问可能会出现竞态条件或导致未定义的行为。

尽管在这个特定的代码片段中不容易直接判断线程安全性问题。

因此我在这里进行了完善确保多线程并发访问下的安全性以上写法太过繁琐可以参考如下代码方式。

Slf4j

ReentrantLock();Autowiredprivate

registry;/***

listenerName*/GetMapping(/start/{listenerName})public

void

(!isListenerRunning(listenerName))

{log.info(start

listenerName);startListener(listenerName);}resumeListener(listenerName);log.info(resume

done.

监听器的名称。

*/GetMapping(/pause/{listenerName})public

void

registry.getListenerContainer(listenerName);if

(listenerContainer

listenerName);return;}log.info(Attempting

pause

listenerName);listenerContainer.pause();log.info(listenerName

pause

{Objects.requireNonNull(registry.getListenerContainer(listenerName)).start();}

catch

{Objects.requireNonNull(registry.getListenerContainer(listenerName)).resume();}

catch

Objects.requireNonNull(registry.getListenerContainer(listenerName)).isRunning();}

catch

最终我在测试完后结果是符合预期的先暂停然后持续发送消息观察有无收到消息然后在重新启动监听即可。

curl

http://localhost:8080/consumer/pause/eventListener

#!/bin/bash

生成Long类型的唯一IDMSG_ID$(uuidgen)MESSAGERandom

message

$(generate_random_number)JSON_MESSAGE{\id\:\$ID\,

\msgId\:\$MSG_ID\,

kafka集成进行消费的使用过程对消费者的配置和以及对消费者的启动和暂停实践详细介绍了配置各个步骤。

不足之处未提及异常处理批量消费消费者动态扩缩提升消费能力的问题这些后面在陆续补充。

如果觉得有用不妨点赞关注一波下期再会



SEO优化服务概述

作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。

百度官方合作伙伴 白帽SEO技术 数据驱动优化 效果长期稳定

SEO优化核心服务

网站技术SEO

  • 网站结构优化 - 提升网站爬虫可访问性
  • 页面速度优化 - 缩短加载时间,提高用户体验
  • 移动端适配 - 确保移动设备友好性
  • HTTPS安全协议 - 提升网站安全性与信任度
  • 结构化数据标记 - 增强搜索结果显示效果

内容优化服务

  • 关键词研究与布局 - 精准定位目标关键词
  • 高质量内容创作 - 原创、专业、有价值的内容
  • Meta标签优化 - 提升点击率和相关性
  • 内容更新策略 - 保持网站内容新鲜度
  • 多媒体内容优化 - 图片、视频SEO优化

外链建设策略

  • 高质量外链获取 - 权威网站链接建设
  • 品牌提及监控 - 追踪品牌在线曝光
  • 行业目录提交 - 提升网站基础权威
  • 社交媒体整合 - 增强内容传播力
  • 链接质量分析 - 避免低质量链接风险

SEO服务方案对比

服务项目 基础套餐 标准套餐 高级定制
关键词优化数量 10-20个核心词 30-50个核心词+长尾词 80-150个全方位覆盖
内容优化 基础页面优化 全站内容优化+每月5篇原创 个性化内容策略+每月15篇原创
技术SEO 基本技术检查 全面技术优化+移动适配 深度技术重构+性能优化
外链建设 每月5-10条 每月20-30条高质量外链 每月50+条多渠道外链
数据报告 月度基础报告 双周详细报告+分析 每周深度报告+策略调整
效果保障 3-6个月见效 2-4个月见效 1-3个月快速见效

SEO优化实施流程

我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:

1

网站诊断分析

全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。

2

关键词策略制定

基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。

3

技术优化实施

解决网站技术问题,优化网站结构,提升页面速度和移动端体验。

4

内容优化建设

创作高质量原创内容,优化现有页面,建立内容更新机制。

5

外链建设推广

获取高质量外部链接,建立品牌在线影响力,提升网站权威度。

6

数据监控调整

持续监控排名、流量和转化数据,根据效果调整优化策略。

SEO优化常见问题

SEO优化一般需要多长时间才能看到效果?
SEO是一个渐进的过程,通常需要3-6个月才能看到明显效果。具体时间取决于网站现状、竞争程度和优化强度。我们的标准套餐一般在2-4个月内开始显现效果,高级定制方案可能在1-3个月内就能看到初步成果。
你们使用白帽SEO技术还是黑帽技术?
我们始终坚持使用白帽SEO技术,遵循搜索引擎的官方指南。我们的优化策略注重长期效果和可持续性,绝不使用任何可能导致网站被惩罚的违规手段。作为百度官方合作伙伴,我们承诺提供安全、合规的SEO服务。
SEO优化后效果能持续多久?
通过我们的白帽SEO策略获得的排名和流量具有长期稳定性。一旦网站达到理想排名,只需适当的维护和更新,效果可以持续数年。我们提供优化后维护服务,确保您的网站长期保持竞争优势。
你们提供SEO优化效果保障吗?
我们提供基于数据的SEO效果承诺。根据服务套餐不同,我们承诺在约定时间内将核心关键词优化到指定排名位置,或实现约定的自然流量增长目标。所有承诺都会在服务合同中明确约定,并提供详细的KPI衡量标准。

SEO优化效果数据

基于我们服务的客户数据统计,平均优化效果如下:

+85%
自然搜索流量提升
+120%
关键词排名数量
+60%
网站转化率提升
3-6月
平均见效周期

行业案例 - 制造业

  • 优化前:日均自然流量120,核心词无排名
  • 优化6个月后:日均自然流量950,15个核心词首页排名
  • 效果提升:流量增长692%,询盘量增加320%

行业案例 - 电商

  • 优化前:月均自然订单50单,转化率1.2%
  • 优化4个月后:月均自然订单210单,转化率2.8%
  • 效果提升:订单增长320%,转化率提升133%

行业案例 - 教育

  • 优化前:月均咨询量35个,主要依赖付费广告
  • 优化5个月后:月均咨询量180个,自然流量占比65%
  • 效果提升:咨询量增长414%,营销成本降低57%

为什么选择我们的SEO服务

专业团队

  • 10年以上SEO经验专家带队
  • 百度、Google认证工程师
  • 内容创作、技术开发、数据分析多领域团队
  • 持续培训保持技术领先

数据驱动

  • 自主研发SEO分析工具
  • 实时排名监控系统
  • 竞争对手深度分析
  • 效果可视化报告

透明合作

  • 清晰的服务内容和价格
  • 定期进展汇报和沟通
  • 效果数据实时可查
  • 灵活的合同条款

我们的SEO服务理念

我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。

提交需求或反馈

Demand feedback