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

建设一个网站的具体步骤域名信息查询网站

建设一个网站的具体步骤,域名信息查询网站,安徽省建设厅网站资料下载,网站建设关键技术当我们在Spring Cloud应用中使用Consul来实现服务治理时#xff0c;由于Consul不会自动将不可用的服务实例注销掉#xff08;deregister#xff09;#xff0c;这使得在实际使用过程中#xff0c;可能因为一些操作失误、环境变更等原因让Consul中存在一些无效实例信息由于Consul不会自动将不可用的服务实例注销掉deregister这使得在实际使用过程中可能因为一些操作失误、环境变更等原因让Consul中存在一些无效实例信息而这些实例在Consul中会长期存在并处于断开状态。它们虽然不会影响到正常的服务消费过程但是它们会干扰我们的监控所以我们可以实现一个清理接口在确认故障实例可以清理的时候进行调用来将这些无效信息清理掉。 开始以为只要简单的调用注销接口就能轻松完成但是实际实践的发现并非如此。因此分享一下整个实现过程以及中间遇到的一些坑。 借鉴Spring Cloud Consul 在实现之初先参考了Spring Cloud Consul在关闭程序时候实现的注销方法具体如下 public class ConsulLifecycle extends AbstractDiscoveryLifecycle { ... private void deregister(String serviceId) { if (!this.properties.isRegister()) { return; } if (ttlScheduler ! null) { ttlScheduler.remove(serviceId); } log.info(Deregistering service with consul: {}, serviceId); client.agentServiceDeregister(serviceId); } ...}我们可以看到当应用关闭时候的注销操作是通过调用client.agentServiceDeregister(serviceId)来实现的。其中client是consul-api的com.ecwid.consul.v1.ConsulClient实例。而agentServiceDeregister方法则是对/v1/agent/service/deregister/serviceID 接口的实现该接口主要用来从Consul Agent中根据serviceId来注销实例。 以此实现为范例于是开始的思路是这样的 先通过consulClient.getHealthServices(serviceId, false, null)根据serviceId来获取服务实例清单遍历实例清单中有不是PASSING状态的实例就调用client.agentServiceDeregister(serviceId)来剔除 具体实现如下 RestControllerpublic class ApiController { Autowired private ConsulClient consulClient; RequestMapping(value /unregister/{id}, method RequestMethod.POST) public String unregisterServiceAll(PathVariable String id) { ListHealthService response consulClient.getHealthServices(id, false, null).getValue(); for(HealthService service : response) { service.getChecks().forEach(check - { if(!check.getStatus().name().equals(Check.CheckStatus.PASSING.name())) { logger.info(unregister : {}, check.getServiceId()); consulClient.agentServiceDeregister(check.getServiceId()); } }); } return null; }}但是在测试后发现该方法只能剔除同一个agent上的非PASSING实例。 Catalog误区 继续搜索了一下Consul的文档发现了这个接口/v1/catalog/deregister : Deregisters a node, service, or check。于是尝试了用该接口来替换之前的consulClient.agentServiceDeregister(check.getServiceId());实现。 CatalogDeregistration catalogDeregistration new CatalogDeregistration();catalogDeregistration.setDatacenter(dc1);catalogDeregistration.setNode(check.getNode());catalogDeregistration.setServiceId(check.getServiceId());catalogDeregistration.setCheckId(check.getCheckId());consulClient.catalogDeregister(catalogDeregistration);经过测试该方法可以实现短暂的剔除但是过一段时间之后这些被剔除的实例又都恢复回来了……也就是说这个接口完全没有什么卵用 那么为什么会出现这种情况呢我们可以在Github中找到这个维持了一年多的问题讨论https://github.com/hashicorp/consul/issues/1188 整个讨论过程非常曲折虽然当前该问题还依然在open状态但是一些回复也基本够我们去理解它的原因了。比如下面这条评论 You cannot deregister a service from the agent on a different node, service only exists on the agent you have registered with. It also exists in the catalog on all nodes, but that is not related to the agent itself. And to be honest I don’t understand why there is a catalog/deregister endpoint at all, in my opinion catalog should be a read-only service list. 从该评论中我们可以知道一个重要信息服务实例只能在注册的Agent上进行注销另外对于/v1/catalog/deregister接口目前还是有不少争议的因为根本没啥用。 最终实现 既然服务实例只能在注册的Agent上进行注销那么我们的实现完全可以按照该思路来实现方法很简单只需要对一开始实现的内容做一些调整依然使用client.agentServiceDeregister(serviceId)方法只是我们需要调整client连接的agent必须是serviceId注册的agent。所以最终的修改结果如下 ListHealthService response consulClient.getHealthServices(id, false, null).getValue();for(HealthService service : response) { // 创建一个用来剔除无效实例的ConsulClient连接到无效实例注册的agent ConsulClient clearClient new ConsulClient(service.getNode().getAddress(), 8500); service.getChecks().forEach(check - { if(check.getStatus() ! Check.CheckStatus.PASSING) { logger.info(unregister : {}, check.getServiceId()); clearClient.agentServiceDeregister(check.getServiceId()); } });}
http://www.zqtcl.cn/news/585075/

相关文章:

  • 网站文章页图片不显示图片手机设计
  • 公司网站版面怎么设计湖南做网站 就问磐石网络专业
  • 描述网站开发的广告词黄页网络的推广
  • 打开官方网站广告平面设计好学吗
  • 建设银行观澜支行网站做网站公司汉狮网络
  • 荆州学校网站建设seo专业培训机构
  • 网站制作上网建站程序的价钱
  • 阿里巴巴网站建设规划24小时学会网站建设pdf
  • wordpress建站以后网络公司注册资金多少
  • wordpress下载站模板优秀网站开发公司
  • ppt模板免费下载完整版免费网站微网站开发商
  • 网站建设前的分析第一小节内容wordpress自带主题下载失败
  • 深圳微信网站设计网站建设设计制作外包
  • 做数模必逛的网站wordpress 培训 主题
  • 开发网站语言天元建设集团有限公司电话
  • 兼职做网站访问量和数据关于外贸公司的网站模板
  • 旅游网站设计与实现软件定制报价单
  • 上海专业网站建站公网站开发人员
  • 淄博网站建设公司有几家网络培训平台下载
  • 优秀网站展示仲恺做网站
  • 达州做淘宝网站制作3d动画的软件
  • 服务器主机搭建网站wordpress 隐私设置
  • 专业的网站制作公司wordpress 网页模板
  • 中国建设人才服务信息网是什么网站深圳居家办公最新通知
  • 中国建设银行网站招聘wordpress 文件下载插件
  • 福州企业建站程序莆田市的网站建设公司
  • 龙岩做网站推广龙华品牌网站建设
  • 如何用网站开发工具停止网页进程微信网站 教程
  • 高端网站网站设计网站建设怎么分析市场分析
  • 株洲网站设计外包运营wordpress seo插件教程