当前位置: 首页 > news >正文

wordpress网站上传到服务器成都建站价格

wordpress网站上传到服务器,成都建站价格,深圳品牌床垫有哪些,静态网站建设平台文章目录 Pre核心内容服务端结构概述注册中心的实现1. 注册中心的架构2. 面向接口编程的设计3. 注册中心的接口设计4. SPI机制的应用 小结 Pre Simple RPC - 01 框架原理及总体架构初探 Simple RPC - 02 通用高性能序列化和反序列化设计与实现 Simple RPC - 03 借助Netty实现… 文章目录 Pre核心内容服务端结构概述注册中心的实现1. 注册中心的架构2. 面向接口编程的设计3. 注册中心的接口设计4. SPI机制的应用 小结 Pre Simple RPC - 01 框架原理及总体架构初探 Simple RPC - 02 通用高性能序列化和反序列化设计与实现 Simple RPC - 03 借助Netty实现异步网络通信 Simple RPC - 04 从零开始设计一个客户端上 Simple RPC - 05 从零开始设计一个客户端下_ 依赖倒置和SPI 核心内容 服务端结构概述注册中心和RPC服务的结构及作用。注册中心实现通过单机版的注册中心实现共享元数据分析其接口设计和SPI机制。RPC服务实现理解服务端处理RPC请求的核心逻辑包括如何注册服务和处理请求。请求分发机制深入了解RequestInvocation和RpcRequestHandler类中的请求分发机制。代码分析与总结通过代码实例进一步理解设计思想并总结整体架构和设计原则。 服务端结构概述 在RPC框架中服务端可以分为两个主要部分注册中心和RPC服务。 注册中心负责管理服务元数据并提供服务发现的功能。RPC服务负责处理客户端发来的RPC请求并调用相应的业务服务。 简单来说注册中心的作用是帮助客户端来寻址找到对应 RPC 服务的物理地址RPC 服务用于接收客户端桩的请求调用业务服务的方法并返回结果。 注册中心的实现 1. 注册中心的架构 通常一个完整的注册中心包括客户端和服务端两部分 客户端向调用方提供 API负责与注册中心服务端的通信。 服务端实际管理和记录每个 RPC 服务的注册信息并将这些信息存储在元数据中。当客户端需要查找服务时服务端会返回对应的服务地址。 在本例中出于简化考虑我们实现了一个单机版的注册中心。这个注册中心只有客户端部分多个客户端通过读写同一个本地元数据文件实现服务信息的共享。 该注册中心只能在单机环境下运行不支持跨服务器调用。 2. 面向接口编程的设计 尽管当前实现是单机版的注册中心但通过“面向接口编程”的设计模式我们可以在不修改已有代码的情况下通过 SPI 插件机制扩展出一个支持跨服务器调用的注册中心例如基于 HTTP 协议的实现。 3. 注册中心的接口设计 在 RPC 框架的接入点接口 RpcAccessPoint 中增加了一个用于获取注册中心实例的方法 public interface RpcAccessPoint extends Closeable {/*** 获取注册中心的引用* param nameServiceUri 注册中心 URI* return 注册中心引用*/NameService getNameService(URI nameServiceUri); }该方法接受一个注册中心的 URI 作为参数并返回一个 NameService 接口的实例。这个 NameService 接口表示注册中心的客户端可以用来和注册中心服务端通信。 NameService 接口中定义了与注册中心通信的核心方法 public interface NameService {/*** 返回所有支持的协议*/CollectionString supportedSchemes();/*** 连接注册中心* param nameServiceUri 注册中心地址*/void connect(URI nameServiceUri); }supportedSchemes 方法返回注册中心支持的协议例如 file 或 http。connect 方法根据 URI 建立与注册中心的连接。 完整代码如下 /*** 注册中心接口定义* 该接口用于服务的注册和发现支持多种通信协议** author artisan*/ public interface NameService {/*** 获取所有支持的协议** return 支持的协议集合*/CollectionString supportedSchemes();/*** 连接注册中心** param nameServiceUri 注册中心的URI地址*/void connect(URI nameServiceUri);/*** 注册服务** param serviceName 服务名称* param uri 服务的URI地址* throws IOException 如果连接或注册失败则抛出此异常*/void registerService(String serviceName, URI uri) throws IOException;/*** 查询服务地址** param serviceName 服务名称* return 服务的URI地址* throws IOException 如果查找失败则抛出此异常*/URI lookupService(String serviceName) throws IOException; } 4. SPI机制的应用 通过 SPI 机制RpcAccessPoint 可以根据 URI 中指定的协议动态加载不同的 NameService 实现类。例如在单机版注册中心中NameService 的实现类是 LocalFileNameService其具体功能是读写本地文件存储和查找服务信息。 public class LocalFileNameService implements NameService {Overridepublic CollectionString supportedSchemes() {return Collections.singleton(file);}Overridepublic void connect(URI nameServiceUri) {// 连接到本地文件初始化文件读写工具}// 其他方法实现... }通过这种方式新的注册中心实现可以通过 SPI 动态添加到系统中。例如要实现一个基于 HTTP 的注册中心只需开发一个新的 NameService 实现类并将其添加到系统的 CLASSPATH 中即可。 LocalFileNameService代码如下 /*** LocalFileNameService 类实现了 NameService 接口提供了一种基于文件系统来管理服务名称和URI的实现方式* 它使用 file 协议来操作本地文件并将服务信息存储在文件中* author artisan*/ public class LocalFileNameService implements NameService {private static final Logger logger LoggerFactory.getLogger(LocalFileNameService.class);/*** 支持的协议集合本实现仅支持 file 协议*/private static final CollectionString schemes Collections.singleton(file);/*** 用于存储服务信息的文件对象*/private File file;/*** 返回此服务支持的协议集合** return 支持的协议集合*/Overridepublic CollectionString supportedSchemes() {return schemes;}/*** 连接到指定的名称服务URI如果支持该URI的协议则将URI解析为本地文件* 此方法首先检查给定的URI是否使用受支持的协议如果协议受支持则将URI转换为本地文件路径* 如果不支持该协议则抛出运行时异常** param nameServiceUri 名称服务的URI用于连接和解析* throws RuntimeException 如果URI的协议不受支持则抛出此异常*/Overridepublic void connect(URI nameServiceUri) {// 检查URI的协议是否在支持的协议列表中if (schemes.contains(nameServiceUri.getScheme())) {// 如果协议受支持则将URI转换为本地文件路径file new File(nameServiceUri);} else {// 如果协议不受支持则抛出异常throw new RuntimeException(Unsupported scheme!);}}/*** 注册服务将服务名称和服务URI写入到文件中* 此方法是同步的以确保并发访问时的数据一致性** param serviceName 服务名称* param uri 服务的URI* * throws IOException 如果发生I/O错误*/Overridepublic synchronized void registerService(String serviceName, URI uri) throws IOException {// 记录服务注册的日志信息logger.info(Register service: {}, uri: {}., serviceName, uri);// 使用RandomAccessFile和FileChannel来读写文件并确保资源在使用后能够正确关闭try (RandomAccessFile raf new RandomAccessFile(file, rw);FileChannel fileChannel raf.getChannel()) {// 获取文件锁以确保并发访问时的数据一致性FileLock lock fileChannel.lock();try {// 获取文件长度用于后续判断文件是否为空int fileLength (int) raf.length();Metadata metadata;byte[] bytes;// 如果文件长度大于0说明文件非空读取并解析文件内容if (fileLength 0) {bytes new byte[(int) raf.length()];ByteBuffer buffer ByteBuffer.wrap(bytes);// 循环读取文件内容到ByteBuffer中while (buffer.hasRemaining()) {fileChannel.read(buffer);}// 解析字节码为Metadata对象metadata SerializeSupport.parse(bytes);} else {// 如果文件为空创建一个新的Metadata对象metadata new Metadata();}// 根据服务名获取或创建一个空的URI列表ListURI uris metadata.computeIfAbsent(serviceName, k - new ArrayList());// 如果列表中不存在该URI则添加进去if (!uris.contains(uri)) {uris.add(uri);}// 记录更新后的Metadata信息logger.info(metadata.toString());// 将Metadata对象序列化为字节码bytes SerializeSupport.serialize(metadata);// 清空文件为写入新的字节码做准备fileChannel.truncate(bytes.length);// 将文件指针移到文件开头准备写入fileChannel.position(0L);// 将字节码写入文件fileChannel.write(ByteBuffer.wrap(bytes));// 强制将写入操作刷入磁盘fileChannel.force(true);} finally {// 释放文件锁lock.release();}}}/*** 根据服务名称查找服务的URI* 如果文件中存在对应的服务URI则随机返回一个** param serviceName 服务名称* return 服务的URI如果找不到则返回null* throws IOException 如果发生I/O错误*/Overridepublic URI lookupService(String serviceName) throws IOException {Metadata metadata;// 使用try-with-resources语句确保文件资源正确关闭try (RandomAccessFile raf new RandomAccessFile(file, rw);FileChannel fileChannel raf.getChannel()) {// 获取文件锁以确保数据的一致性FileLock lock fileChannel.lock();try {// 读取文件内容到字节数组byte[] bytes new byte[(int) raf.length()];ByteBuffer buffer ByteBuffer.wrap(bytes);// 循环读取直到文件末尾while (buffer.hasRemaining()) {fileChannel.read(buffer);}// 如果文件非空则反序列化为Metadata对象否则创建新的空Metadata对象metadata bytes.length 0 ? new Metadata() : SerializeSupport.parse(bytes);// 记录日志logger.info(metadata.toString());} finally {// 释放文件锁lock.release();}}// 从Metadata中获取服务的所有URIListURI uris metadata.get(serviceName);// 如果没有找到对应的URI列表返回nullif (null uris || uris.isEmpty()) {return null;} else {// 随机选择一个URI返回return uris.get(ThreadLocalRandom.current().nextInt(uris.size()));}} } 小结 面向接口编程设计时面向接口编程使得系统具有良好的扩展性可以通过增加 SPI 插件方式扩展新的功能。单机版注册中心当前实现的是一个单机版的注册中心通过本地文件共享元数据不支持跨服务器调用。SPI机制通过 SPI 机制可以动态加载不同的 NameService 实现支持多种协议的注册中心。 这种设计模式确保了系统的灵活性和可扩展性为后续的功能扩展提供了便利。
文章转载自:
http://www.morning.ypjjh.cn.gov.cn.ypjjh.cn
http://www.morning.rwmqp.cn.gov.cn.rwmqp.cn
http://www.morning.xckrj.cn.gov.cn.xckrj.cn
http://www.morning.mcjrf.cn.gov.cn.mcjrf.cn
http://www.morning.nknt.cn.gov.cn.nknt.cn
http://www.morning.zmwd.cn.gov.cn.zmwd.cn
http://www.morning.tdzxy.cn.gov.cn.tdzxy.cn
http://www.morning.yrqb.cn.gov.cn.yrqb.cn
http://www.morning.mzhh.cn.gov.cn.mzhh.cn
http://www.morning.rltsx.cn.gov.cn.rltsx.cn
http://www.morning.xhlpn.cn.gov.cn.xhlpn.cn
http://www.morning.sskns.cn.gov.cn.sskns.cn
http://www.morning.tqlhn.cn.gov.cn.tqlhn.cn
http://www.morning.rxkl.cn.gov.cn.rxkl.cn
http://www.morning.xfmzk.cn.gov.cn.xfmzk.cn
http://www.morning.ns3nt8.cn.gov.cn.ns3nt8.cn
http://www.morning.mrqwy.cn.gov.cn.mrqwy.cn
http://www.morning.tlzbt.cn.gov.cn.tlzbt.cn
http://www.morning.fnhxp.cn.gov.cn.fnhxp.cn
http://www.morning.sgmgz.cn.gov.cn.sgmgz.cn
http://www.morning.rhdln.cn.gov.cn.rhdln.cn
http://www.morning.nrmyj.cn.gov.cn.nrmyj.cn
http://www.morning.wsnjn.cn.gov.cn.wsnjn.cn
http://www.morning.qmzwl.cn.gov.cn.qmzwl.cn
http://www.morning.krnzm.cn.gov.cn.krnzm.cn
http://www.morning.ymyhg.cn.gov.cn.ymyhg.cn
http://www.morning.prgnp.cn.gov.cn.prgnp.cn
http://www.morning.snlxb.cn.gov.cn.snlxb.cn
http://www.morning.zmwzg.cn.gov.cn.zmwzg.cn
http://www.morning.ksbmx.cn.gov.cn.ksbmx.cn
http://www.morning.fhyhr.cn.gov.cn.fhyhr.cn
http://www.morning.sprbs.cn.gov.cn.sprbs.cn
http://www.morning.hqrkq.cn.gov.cn.hqrkq.cn
http://www.morning.jxwhr.cn.gov.cn.jxwhr.cn
http://www.morning.qfdyt.cn.gov.cn.qfdyt.cn
http://www.morning.vehna.com.gov.cn.vehna.com
http://www.morning.madamli.com.gov.cn.madamli.com
http://www.morning.caswellintl.com.gov.cn.caswellintl.com
http://www.morning.pynzj.cn.gov.cn.pynzj.cn
http://www.morning.zgpgl.cn.gov.cn.zgpgl.cn
http://www.morning.gftnx.cn.gov.cn.gftnx.cn
http://www.morning.yyzgl.cn.gov.cn.yyzgl.cn
http://www.morning.qjsxf.cn.gov.cn.qjsxf.cn
http://www.morning.rhlhk.cn.gov.cn.rhlhk.cn
http://www.morning.cttti.com.gov.cn.cttti.com
http://www.morning.jrrqs.cn.gov.cn.jrrqs.cn
http://www.morning.fsbns.cn.gov.cn.fsbns.cn
http://www.morning.hjwkq.cn.gov.cn.hjwkq.cn
http://www.morning.zxhhy.cn.gov.cn.zxhhy.cn
http://www.morning.wdrxh.cn.gov.cn.wdrxh.cn
http://www.morning.rfwrn.cn.gov.cn.rfwrn.cn
http://www.morning.mbaiwan.com.gov.cn.mbaiwan.com
http://www.morning.bzbq.cn.gov.cn.bzbq.cn
http://www.morning.pyzt.cn.gov.cn.pyzt.cn
http://www.morning.cfrz.cn.gov.cn.cfrz.cn
http://www.morning.wschl.cn.gov.cn.wschl.cn
http://www.morning.syxmx.cn.gov.cn.syxmx.cn
http://www.morning.pnbls.cn.gov.cn.pnbls.cn
http://www.morning.ybgcn.cn.gov.cn.ybgcn.cn
http://www.morning.hrtwt.cn.gov.cn.hrtwt.cn
http://www.morning.nchlk.cn.gov.cn.nchlk.cn
http://www.morning.rahllp.com.gov.cn.rahllp.com
http://www.morning.gbrdx.cn.gov.cn.gbrdx.cn
http://www.morning.rwls.cn.gov.cn.rwls.cn
http://www.morning.wffxr.cn.gov.cn.wffxr.cn
http://www.morning.srgyj.cn.gov.cn.srgyj.cn
http://www.morning.nfqyk.cn.gov.cn.nfqyk.cn
http://www.morning.ghxzd.cn.gov.cn.ghxzd.cn
http://www.morning.nhpmn.cn.gov.cn.nhpmn.cn
http://www.morning.skpdg.cn.gov.cn.skpdg.cn
http://www.morning.iznek.com.gov.cn.iznek.com
http://www.morning.jpbky.cn.gov.cn.jpbky.cn
http://www.morning.txzqf.cn.gov.cn.txzqf.cn
http://www.morning.jwpcj.cn.gov.cn.jwpcj.cn
http://www.morning.knjj.cn.gov.cn.knjj.cn
http://www.morning.rnngz.cn.gov.cn.rnngz.cn
http://www.morning.xpwdf.cn.gov.cn.xpwdf.cn
http://www.morning.kyjpg.cn.gov.cn.kyjpg.cn
http://www.morning.xuejitest.com.gov.cn.xuejitest.com
http://www.morning.kkgbs.cn.gov.cn.kkgbs.cn
http://www.tj-hxxt.cn/news/279132.html

相关文章:

  • 大型网络建站公司wordpress 缩略图判断
  • 智能营销型网站网站开发 英语
  • 手机看网站建设公司网站
  • 重庆建网站培训机构局域网网站建设
  • 如何将百度收录网站wordpress能恢复数据库吗
  • 网页设计与网站建设作业怎么做保定网站搜索排名
  • 清湖网站建设事业单位网站建设计划
  • 哪个网站可以卖自己的设计容桂电子商务网站建设
  • 学院的网站建设的意义网络规划设计师大纲
  • 什么网站做海报建设微信网站设计制作
  • 泰安网站建设哪家快网络设计报告网络安全
  • 网站显示500错误怎么解决方法导航网站能个人备案
  • 宜兴市建设局网站宝塔建站系统
  • 已经有了网站源代码怎样搭建福田祥菱m1图片及报价
  • 12306网站是谁做的wordpress 自写插件
  • 淘宝联盟怎样做新增网站推广阿里云服务器wordpress部署方案
  • 南京机关建设网站贵阳网站制作系统
  • 网站上线如何做公司名字外包开发一个app多少钱
  • 公司网站建设费计入哪个科目wordpress加载太慢
  • 蛋糕网站案例网站icp证明
  • 昆明比较好的网站开发公司前端和后端哪个累
  • 哪些客户需要做网站网站维护英文
  • 传奇简单网站模板网站弹窗怎么做
  • 安徽元鼎建设工程有限责任公司网站苏州企业网页制作
  • 网站面包屑导航wordpress多板块
  • 解释网站为什么这样做wordpress 代码压缩
  • 不配置iis做网站网站中文模板
  • 班级网站html代码全世界做会展介绍的网站排名
  • 重庆网站建站模板公司域名被锁定网站打不开怎么办
  • 网站建设怎样去销售做试用的网站