SEO教程

SEO教程

Products

当前位置:首页 > SEO教程 >

郴州网站制作:如何为郴网互联智慧团建创建手机和电脑登录入口?

96SEO 2026-02-19 22:29 0


模型▲

模型相当于一对一跟调用方法一样能拿到方法返回的结果这就是典型的RPC模型不仅要传参数还需要拿到返回值

郴州网站制作:如何为郴网互联智慧团建创建手机和电脑登录入口?

reply回答、答复

通过使用两个独享队列可以让RabbitMQ实现RPC远程过程调用通信模型

其通信过程其实也很简单客户端向服务器消费的独享队列发送一条消息服务器收到该消息后对该消息进行处理然后将处理结果发送给客户端消费的独享队列。

服务器端消费的独享队列负责保存调用参数客户端消费的独享队列负责保存调用的返回值。

使用独享队列可以避免其他连接来读取队列的消息、只有当前连接才能读取该队列的消息这样才能保证服务器能读到客户端发送的每条消息客户端也能读到服务器返回的每条消息。

为了让服务器知道客户端所消费的独享队列客户端发送消息时应该将自己监听的队列名以

reply_to属性

▲为了能准确识别服务器应答消息返回值与客户端请求消息调用参数之间的对应关系

还需要为每条消息都增加一个

reply_to该属性指定了服务器要将返回的消息送回到哪个队列。

correlation_id该属性指定了服务器返回的消息也要添加相同的correlation_id属性。

1服务器启动时它会创建一个名为“rpc_queue”的独享队列名称可以随意并使用服务器端的消费者监听该独享队列的消息。

所有的RPC

调用一定都是先从服务器端的启动开始的。

2客户端启动时它会创建一个匿名默认由RabbitMQ命名的

独享队列并使用客户端的消费者监听该独享队列的消息。

这个独享队列的名字也是

reply_to

属性的属性值3客户端发送带有两个属性的消息一个是代表应答队列名的

reply_to属性该属性值就是第2步客户端所创建的独享队列名另一个是代表消息标识的

correlation_id

属性。

4将消息发送到服务器监听的rpc_queue队列中。

5服务器从rpc_queue队列中读取消息服务器调用处理程序对该消息进行计算将计算结果以消息发送给

reply_to属性

属性值匹配将它返回给应用。

————上面过程其实就是对P2P模型的应用因此无需使用自己的Exchange而是使用系统自动创建的默认Exchange即可。

代码演示

总体流程解释

方法声明队列时不指定具体的消息队列的参数全凭默认生成客户端监听着这个默认的消息队列。

replyTo

这个默认消息队列作用是指定了服务器要将返回的消息送回到这个默认队列

correlationId

解释如果消息发布者指定默认的Exchange那么Exchange就会根据消息发布者发来的消息中携带的路由key假如路由key叫

aaa

去找是否有同样名字叫aaa的消息队列有的话就把消息分发给消息队列没有的话该消息就会被丢弃

rpc_queue

这个消息队列的时候把这个消息队列设置为独享类型exclusivetrue那么

rpc_queue

这个消息队列里面的消息就只能被这个服务端消费不能被其他消费者获取到消息。

因为服务端监听这个

这个消息队列所以服务端拿到这个消息队列的消息之后就会把消息中的

replyTo

业务逻辑处理完消息后服务端需要把这些处理后的消息返回给客户端。

correlationId

标识所以服务端在返回回去时需要把处理好的消息的原本的correlationId

比如客户端发来消息

就是拿出来处理完消息再放回去这样客户端在接收服务端返回来的处理过后的A消息时才能根据

correlationId

服务端返回处理过的消息给客户端也是一个发送消息的过程所以发送消息指定的消息队列就是这个

这个默认消息队列这个replyTo

也是从客户端发送来的消息中获取获取一个属性作用是指定了服务端要将返回的消息送回到这个默认队列。

amq.gen-3xxx

这个默认消息队列所以客户端就能得到自己一开始发送给服务端然后服务端处理完成后返回来的消息。

然后客户端就能根据

这个标识准确找到每个被处理修改过后的消息而不至于找混。

再根据需求去对处理过的消息进行业务操作。

客户端声明并监听着默认队列

amq.gen-3xxx然后发送消息到客户端消息携带有correlationId

replyto

两个属性路由key是rpc_queueexchange是默认的。

服务端声明并监听

消息队列从该队列得到消息messageA后从每个消息中获取该消息对应的

correlationId

两个属性的属性值然后处理消息对于处理完的消息resultMessageA需要把correlationId

replyto

两个属性的属性值重新设置回给resultMessageA在通过Exchange分发回给

replyto

默认的消息队列中获取服务端处理并返回回来的消息进行对应的消费。

ConstantUtil

服务器端----------------//消息队列public

final

------------topic类型的Exchange需要的相关常量----------public

final

www.crazyit.cn,edu.crazyit.org,

crazyit.org,

edu.org};//-------------------------------------------------------//

final

com.rabbitmq.client.Connection;

import

com.rabbitmq.client.ConnectionFactory;import

java.io.IOException;

java.util.concurrent.TimeoutException;//连接工具

public

TimeoutException{//创建连接工厂----这个ConnectionFactory源码可以看出有构造器所以直接new一个出来ConnectionFactory

connectionFactory

ConnectionFactory();//设置连接信息connectionFactory.setHost(localhost);connectionFactory.setPort(5672);connectionFactory.setUsername(ljh);connectionFactory.setPassword(123456);connectionFactory.setVirtualHost(/);

connection

connectionFactory.newConnection();//返回连接return

connection;}

cn.ljh.rabbitmq.producer;import

cn.ljh.rabbitmq.util.ConnectionUtil;

import

cn.ljh.rabbitmq.util.ConstantUtil;

import

java.nio.charset.StandardCharsets;

import

java.util.concurrent.TimeoutException;//消息队列实现

服务器端

TimeoutException{//1、创建连接Connection

conn

ConnectionUtil.getConnection();//2、通过Connection获取Channel。

Channel

channel

conn.createChannel();//3、使用系统自动创建的默认Exchange无需声明Exchange//消息队列设置为独占exclusive:true--------------------------------------------------------------------------------------声明消息队列channel.queueDeclare(ConstantUtil.RPC_QUEUE,true,

*/true,

是否只允许只有这个消息队列的消息消费者才可以消费这个消息队列的消息

*/false,

*///不需要关闭资源因为它也要监听自己消费消息的队列//4、调用Channel

basicConsume()方法开始消费消息----------------------------------------------------------------------------1、服务端监听并消费消息channel.basicConsume(ConstantUtil.RPC_QUEUE,

*/true,new

DefaultConsumer(channel){//处理消息当这个

消息队列收到消息的时候这个方法就会被触发。

重写这个方法Overridepublic

void

/*消息所在的信封,存放消息的exchange、路由key这些*/,AMQP.BasicProperties

properties

IOException{//把消息体中的消息拿出来此处读取到的消息就相当于调用参数-------------------------------------------------------2、服务端获取消息队列的消息String

param

StandardCharsets.UTF_8);//之前只需要用到消息现在需要额外读取消息里面携带的两个属性reply_to

AMQP.BasicProperties

properties.getReplyTo();System.err.println(replyTo:

replyTo);String

properties.getCorrelationId();System.err.println(correlationId:

correlationId);//调用服务器的处理消息的方法最终得到处理后的结果。

该方法可以是任意的业务处理,该方法的返回值result是要被送回客户端的。

------3、服务端处理消费消息String

result

收到来自Exchange为【%s】、路由key为【%s】的消息消息内容为%s%n,envelope.getExchange(),

param);//发送消息的方法需要把返回值result发送回客户端-------------------------------------------------------4、服务端处理消费完的消息返回客户端的操作channel.basicPublish(,

*/replyTo,/*

属性获取到的correlationId再作为参数传回去用于客户端和服务器的匹配。

new

AMQP.BasicProperties().builder().correlationId(correlationId)

correlation_id

属性因为服务器端返回的消息一定要有这个correlationId。

*/result.getBytes(StandardCharsets.UTF_8));}});}//模拟服务器端消费消息要做的处理业务逻辑操作public

static

name){//此处模拟让服务器处理这里的业务有快有慢的情况看correlation_id

rand

cn.ljh.rabbitmq.consumer;import

cn.ljh.rabbitmq.util.ConnectionUtil;

import

cn.ljh.rabbitmq.util.ConstantUtil;

import

java.nio.charset.StandardCharsets;

import

java.util.concurrent.ConcurrentHashMap;

import

java.util.concurrent.TimeoutException;//消息队列实现

客户端

ConcurrentHashMap();//客户端发送的消息参数public

static

TimeoutException{//1、创建连接工厂设置连接信息然后再通过连接工厂获取连接Connection

conn

ConnectionUtil.getConnection();//2、通过Connection获取Channel

channel

自动创建的、自动命名的、持久化的、独享的、会自动删除的【默认队列】AMQP.Queue.DeclareOk

declareOk

channel.queueDeclare();System.out.println(declareOk

用于得到默认队列的返回值也就是默认队列的名字之前声明是我们自己设置队列名这里用默认的队列就用.getQueue()

queueName

declareOk.getQueue();System.out.println(queueName:

basicConsume()方法开始处理消费消息-----------------------------------------------------------------2、客户端监听服务端处理完消息后返回来的消息channel.basicConsume(queueName

/*消息的确认模式是否自动确认该消息已经被消费完成并返回确认消息给消息队列*/,new

DefaultConsumer(channel){//处理消息当这个消息队列收到消息的时候这个方法就会被触发。

重写这个方法Overridepublic

void

/*消息所在的信封,存放消息的exchange、路由key这些*/,AMQP.BasicProperties

properties

IOException{//把消息体中的消息拿出来String

resultMessage

StandardCharsets.UTF_8);//此处需要指定每个返回值对应的是哪个参数靠的就是correlation_idString

correlationId

properties.getCorrelationId();//根据服务器端返回的消息中的correlation_id

param

paramMap.get(correlationId);System.err.println(客户端发出去的消息内容param

服务端处理后返回来的消息内容resultMessage);//printf格式化输出函数

%s输出字符串

收到来自Exchange为【%s】、路由key为【%s】的消息消息内容为%s%n,envelope.getExchange(),

resultMessage);//得到服务器的返回值之后整个调用过程就完成了此时就应该从

Map

)。

paramMap.remove(correlationId);}});//客户端发送消息---------------------------------------------------------------------------代码运行后先执行这段--------------------1、客户端发送消息for

(int

客户端发送消息携带的路由key是服务端监听的消息队列的名字且使用了默认的Exchange这就意味着消息会被发送给服务器监听的那个消息队列

*/new

AMQP.BasicProperties().builder().correlationId(i

correlation_id

correlation_id该属性指定了服务器返回的消息也要添加相同的correlation_id属性*/.replyTo(queueName)

reply_to:

构建这个BasicProperties对象这个对象主要存这个correlationId属性

*/params[i].getBytes(StandardCharsets.UTF_8));}}

pom.xml

xmlnshttp://maven.apache.org/POM/4.0.0xmlns: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/modelVersiongroupIdcn.ljh/groupIdartifactIdrabbitmq_rpc/artifactIdversion1.0.0/versionnamerabbitmq_rpc/name!--

--propertiesmaven.compiler.source11/maven.compiler.sourcemaven.compiler.target11/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncodingjava.version11/java.version/properties!--

--dependencies!--

--dependencygroupIdcom.rabbitmq/groupIdartifactIdamqp-client/artifactIdversion5.13.0/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.16/versionscopecompile/scope/dependency/dependencies/project



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