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

微网站无锡采集站seo提高收录

微网站无锡,采集站seo提高收录,菏泽做网站多少钱,wordpress网站价格具体步骤 安装ZooKeeper&#xff08;启动端口占用&#xff0c;2181&#xff1a;客户端&#xff0c;8080&#xff1a;管理端&#xff09;引入客户端依赖实现注册中心接口SPI补充ZooKeeper注册中心 引入依赖 <!-- zookeeper --> <dependency><groupId>org.a…

具体步骤

  1. 安装ZooKeeper(启动端口占用,2181:客户端,8080:管理端)
  2. 引入客户端依赖
  3. 实现注册中心接口
  4. SPI补充ZooKeeper注册中心

引入依赖

<!-- zookeeper -->
<dependency><groupId>org.apache.curator</groupId><artifactId>curator-x-discovery</artifactId><version>5.6.0</version>
</dependency>

ZooKeeper注册中心实现

/*** zookeeper 注册中心*/
public class ZooKeeperRegistry implements Registry {private static final Logger logger = LoggerFactory.getLogger(ZooKeeperRegistry.class);private CuratorFramework client;private ServiceDiscovery<ServiceMetaInfo> serviceDiscovery;/*** 本机注册的节点 key 集合(用于维护续期)*/private final Set<String> localRegisterNodeKeySet = new HashSet<>();/*** 注册中心服务缓存*/private final RegistryServiceMultiCache registryServiceMultiCache = new RegistryServiceMultiCache();/*** 正在监听的 key 集合*/private final Set<String> watchingKeySet = new ConcurrentHashSet<>();/*** 根节点*/private static final String ZK_ROOT_PATH = "/rpc/zk";@Overridepublic void init(RegistryConfig registryConfig) {// 构建 client 实例client = CuratorFrameworkFactory.builder().connectString(registryConfig.getAddress()).retryPolicy(new ExponentialBackoffRetry(Math.toIntExact(registryConfig.getTimeout()), 3)).build();// 构建 serviceDiscovery 实例serviceDiscovery = ServiceDiscoveryBuilder.builder(ServiceMetaInfo.class).client(client).basePath(ZK_ROOT_PATH).serializer(new JsonInstanceSerializer<>(ServiceMetaInfo.class)).build();try {// 启动 client 和 serviceDiscoveryclient.start();serviceDiscovery.start();} catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic void register(ServiceMetaInfo serviceMetaInfo) throws Exception {// 注册到 zk 里serviceDiscovery.registerService(buildServiceInstance(serviceMetaInfo));// 添加节点信息到本地缓存String registerKey = ZK_ROOT_PATH + "/" + serviceMetaInfo.getServiceNodeKey();localRegisterNodeKeySet.add(registerKey);}@Overridepublic void unRegister(ServiceMetaInfo serviceMetaInfo) {try {serviceDiscovery.unregisterService(buildServiceInstance(serviceMetaInfo));} catch (Exception e) {throw new RuntimeException(e);}// 从本地缓存移除String registerKey = ZK_ROOT_PATH + "/" + serviceMetaInfo.getServiceNodeKey();localRegisterNodeKeySet.remove(registerKey);}@Overridepublic List<ServiceMetaInfo> serviceDiscovery(String serviceKey) {// 优先从缓存获取服务List<ServiceMetaInfo> cachedServiceMetaInfoList = registryServiceMultiCache.readCache(serviceKey);if (cachedServiceMetaInfoList != null) {return cachedServiceMetaInfoList;}try {// 查询服务信息Collection<ServiceInstance<ServiceMetaInfo>> serviceInstanceList = serviceDiscovery.queryForInstances(serviceKey);// 解析服务信息List<ServiceMetaInfo> serviceMetaInfoList = serviceInstanceList.stream().map(ServiceInstance::getPayload).collect(Collectors.toList());// 写入服务缓存registryServiceMultiCache.writeCache(serviceKey, serviceMetaInfoList);return serviceMetaInfoList;} catch (Exception e) {throw new RuntimeException("获取服务列表失败", e);}}@Overridepublic void heartBeat() {// 不需要心跳机制,建立了临时节点,如果服务器故障,则临时节点直接丢失}/*** 监听(消费端)** @param serviceNodeKey 服务节点 key*/@Overridepublic void watch(String serviceNodeKey) {String watchKey = ZK_ROOT_PATH + "/" + serviceNodeKey;boolean newWatch = watchingKeySet.add(watchKey);if (newWatch) {CuratorCache curatorCache = CuratorCache.build(client, watchKey);curatorCache.start();curatorCache.listenable().addListener(CuratorCacheListener.builder().forDeletes(childData -> registryServiceMultiCache.clearCache(serviceNodeKey)).forChanges(((oldNode, node) -> registryServiceMultiCache.clearCache(serviceNodeKey))).build());}}@Overridepublic void destroy() {logger.info("zookeeper注册中心下线...");// 下线节点(这一步可以不做,因为都是临时节点,服务下线,节点就被删掉)for (String key : localRegisterNodeKeySet) {try {client.delete().guaranteed().forPath(key);} catch (Exception e) {throw new RuntimeException(key + "节点下线失败");}}// 释放资源if (client != null) {client.close();}}private ServiceInstance<ServiceMetaInfo> buildServiceInstance(ServiceMetaInfo serviceMetaInfo) {String serviceAddress = serviceMetaInfo.getServiceHost() + ":" + serviceMetaInfo.getServicePort();try {return ServiceInstance.<ServiceMetaInfo>builder().id(serviceAddress).name(serviceMetaInfo.getServiceKey()).address(serviceAddress).payload(serviceMetaInfo).build();} catch (Exception e) {throw new RuntimeException(e);}}
}

添加SPI配置

etcd=com.starlink.registry.EtcdRegistry
zookeeper=com.starlink.registry.ZooKeeperRegistry

image-20241229170512331

最后配置文件指定ZooKeeper为注册中心即可使用ZooKeeper注册中心

rpc.registryConfig.registry=zookeeper
rpc.registryConfig.address=localhost:2181
http://www.mnyf.cn/news/47679.html

相关文章:

  • 介绍好看的电影网站模板免费下载小程序开发收费价目表
  • 用源码做网站步骤线上宣传推广方案
  • 网站制作模板网站新手做seo怎么做
  • 个人网站开发教程市场营销方案范文5篇
  • 百度推广怎么做的网站品牌宣传推广方案
  • win7iis配置网站如何编写一个网站
  • 零基础网站建设教学培训班网络营销主要特点有哪些
  • 做网站怎么上词深圳aso优化
  • 第三方网站建设平台长春网站优化哪家好
  • 中小企业网站建设应该注意什么的网站建设
  • 做兼职的网站有哪些cms网站
  • 做商城网站一般用什么百度关键词
  • html5网站用什么软件宁波seo优化报价多少
  • 网站被取消备案淘宝app官方下载
  • 怎样自学做网站网站推广方案有哪些
  • 英语网站建设的必要性页面seo是什么意思
  • 网站建设的费用预算如何写郑州网络营销
  • 用jsp做网站用什么软件杭州制作公司网站
  • 淄博 建设网站站长seo综合查询
  • 怎么做网站写书品牌广告和效果广告的区别
  • 药品招商网站大全seo排名优化推荐
  • 网站建设外包公司最近有新病毒出现吗
  • 网站建设推广接单语廊坊优化技巧
  • 国外的ps网站阿拉善盟seo
  • 营养早餐网站的设计与制作生意参谋官网
  • 香港八达通app最新版本下载苏州关键词优化搜索排名
  • wordpress限制用户下载次数baidu优化
  • 想学网站建设跨境电商营销推广
  • 企业网站后台管理系统快速排序优化
  • 长春火车站人工电话手机百度app下载安装