首页 文章 精选 留言 我的

精选列表

搜索[可信能力],共10000篇文章
优秀的个人博客,低调大师

通过Nacos让Nginx拥有服务发现能力

背景 先来回忆一下, nginx 如何配置多个实例的负载均衡,配置如下: upstream serverList { server 172.17.0.111:9999; server 172.17.0.110:9999; } server { location / { proxy_pass http://serverList; } } 当我们的服务实例变化时,要手动修改 nginx.conf 然后 nginx -s reload 。 在微服务架构下,我们的服务均已经注册到 注册中心 例如(nacos/eureka),注册中心已经维护所有服务实例的 IP:PORT 列表 ,为何不直接通过 nginx 来获取注册中心中的IP:PORT 列表自动配置 upstream 和热更新。如上思路实现有如下: 使用 nginx-lua-module 模块编写 lua 脚本, 调用注册中心的 Http API 来获取实例列表 配置 upstream,定时 reload 热更新 使用 JAVA/Golang 编写单独的agent,直接使用nacos 对应语言的 SDK ,获取实例列表生成 upstream,并且使用 Naocs SDK 监听服务变化 reload nacos-nginx-template 使用 nacos-nginx-template 以上的第二种思路实现以Agent的形式让Nginx实现对Nacos的服务发现。 下载二进制包 点击此处下载:最新稳定版 配置config.toml 配置文件使用TOML进行配置 nginx_cmd = "/usr/sbin/nginx" nacos_addr = "172.16.0.100:8848,172.16.0.101:8848,172.16.0.102:8848" reload_interval = 1000 [discover_config1] nginx_config = "/etc/nginx/nginx.conf" nginx_upstream = "upsteam1" nacos_service_name = "service1" [discover_config2] nginx_config = "/etc/nginx/nginx.conf" nginx_upstream = "upsteam2" nacos_service_name = "service2" 参数 描述 例子 nginx_cmd nginx命令的全路径 "/usr/sbin/nginx" nacos_addr nacos的地址 "172.16.0.100:8848,172.16.0.101:8848,172.16.0.102:8848" reload_interval nginx reload命令执行间隔时间(ms 默认值1000) 1000 nacos_service_name nacos服务名 "com.nacos.service.impl.NacosService" nginx_config 需要修改nginx配置的路径 "/etc/nginx/nginx.conf" nginx_upstream nginx中upstream的名字 "nacos-service" 启动,即可使用 sh bin/startup.sh 核心代码 获取 config.toml 配置的信息,支持多个 upstream ,调用Nacos Api 拉取实例列表 for (DiscoverConfigBO configBO : list) { namingService.subscribe(configBO.getServiceName(), event -> { List<Instance> instances = namingService .getAllInstances(configBO.getServiceName()); //更新nginx中的upstream refreshUpstream(instances, configBO.getUpstream(), configBO.getConfigPath()); } ); } 根据实例列表,拼凑 upstream private boolean refreshUpstream(List<Instance> instances, String nginxUpstream, String nginxConfigPath) { //获取到upstream 名称 Pattern pattern = Pattern.compile(UPSTREAM_REG.replace(PLACEHOLDER, nginxUpstream)); //获取到配置文件内容 String conf = FileUtl.readStr(nginxConfigPath); //拼接新的upstream String newUpstream = UPSTREAM_FOMAT.replace(PLACEHOLDER, nginxUpstream); StringBuffer servers = new StringBuffer(); if (instances.size() > 0) { for (Instance instance : instances) { //不健康或不可用的跳过 if (!instance.isHealthy() || !instance.isEnabled()) { continue; } servers.append(formatSymbol + " server " + instance.getIp() + ":" + instance.getPort() + ";\n"); } } servers.append(formatSymbol); newUpstream = newUpstream.replace(PLACEHOLDER_SERVER, servers.toString()); //替换原有的upstream conf = matcher.replaceAll(newUpstream); return true; } -Java 调用nginx reload Runtime.getRuntime().exec("nginx -s reload");

优秀的个人博客,低调大师

国密硬件签名与可信时间戳联合:长周期电子证据的法律效力工程实现

很多团队在接入硬件加密设备做签名验签时,会默认"签了名就等于有了法律效力"。这个认知在工程上是不完整的。数字签名解决的只是两个问题:一是身份归属,即这份签名确实由持有私钥的一方产生;二是内容完整性,即签名之后原文未被改动。但它没有解决第三个、也是最容易被忽视的问题——时间确定性。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册