# 服务发现

jweb实现了服务发现模块,实现不同服务的发现,并可通过服务名进行调用。这里使用Alibaba Nacos来做服务发现。

# 启动Nacos服务

可参考Nacos官方文档快速开始 (opens new window)文档启动一个Nacos服务。
启动成功后,访问http://127.0.0.1:8848/nacos (opens new window)可进入Nacos控制台

# 配置文件

在jboot.properties文件中,配置:

undertow.host=0.0.0.0
undertow.port=8080


#服务名配置
jweb.serviceName=demo


#--------jweb 服务发现配置 start--------
#服务发现开启
jweb.discovery.enable=true
#服务名称,服务关键字,后继调用服务dns名(必填)
jweb.discovery.serviceName=${jweb.serviceName}
#Nacos注册中心地址
jweb.discovery.registerAddress=http://192.168.2.202:8848
#命名空间,默认值:public(可选)
#jweb.discovery.namespace=public
#分组名称,默认值:DEFAULT_GROUP(可选)
#jweb.discovery.groupName=dev
#所属集群名称配置,默认值:DEFAULT(可选)
#jweb.discovery.clusterName=TEST
#是否为临时节点实例,默认:true。 true: 临时节点实现;false:为持久化实例;(可选)
#若为临时节点实例,客户端会主动产生上报心跳,来维护节点健康状况
#若为持久化实例,nacos服务器会主动检测服务健康状况,根据集群配置相应检测类型:TCP,HTTP,NONE
jweb.discovery.ephemeral=false
#优先使用的注册的ip段。在一台服务器有多个网卡ip时,优先使用以下ip段(可选)
jweb.discovery.preferredNetworks=192.168.2,10.0
#忽略指定关键字的网卡。在一台服务器有多个网卡ip时,忽略包含以下关键字的网卡名(统一转小写)(可选)
#jweb.discovery.ignoredInterfaces=virtual,docker0,veth,hyper-v,vmware,vmnet,tap,docker,flannel,cni
#--------jweb 服务发现配置 end--------

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

通过配置jweb.discovery.enable=true开启或者关闭服务发现功能 通过配置jweb.discovery.serviceName配置服务名称

启动程序,控制台将输出如下相关字样

Jweb Discovery enabled!
Jweb Creating NamingService instance (http://192.168.2.202:8848) ... --> OK!
Jweb Registering LocalService (192.168.2.202:8080) ... --> OK!
1
2
3

进入Nacos控制台服务列表查看,发现demo服务已经测试上去了。

服务列表

# 常见问题

  1. 问题:服务注册一会儿就被标记不健康了
  • 场景1:当前服务没有开启配置undertow.host,导致服务端口仅bind在本地localhost(127.0.0.1)域名上,其它机器无法访问。可配置undertow.host=0.0.0.0,绑定所有网卡
  • 场景2:当前服务注册上去的地址非远程可访问的ip地址,常见于多网卡机器。可配置jweb.discovery.ignoredInterfaces或者jweb.discovery.preferredNetworks来过滤不需要的网卡ip地址
  • 场景3:服务是否开启防火墙。默认Nacos主动健康检查使用的是TCP探测。当然也支持修改检测类型,Nacos界面配置可修改
    检测类型