【Java】nacos服务注册如何配置分组?
config可以用group字段区分分组 但是discovery如何配置分组
nacos1.0.0
spring:cloud:
nacos:
config:
file-extension: yaml
server-addr:
namespace:
//我可以在这里配置 配置中心的分组
group: Octopus
discovery:
//但是这里如何配置服务注册的分组
server-addr: ${spring.cloud.nacos.config.server-addr}
namespace: ${spring.cloud.nacos.config.namespace}
service: dev
回答
同问,度娘一番,没找到答案,最终看的代码,大概知道怎么回事了。
这个是下面引用源码的版本
<dependency> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
<version>0.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.1.0</version>
</dependency>
没有group的原因在于下面的代码
/* org.springframework.cloud.alibaba.nacos.registry.NacosServiceRegistry *///spring-cloud-alibaba-nacos-discovery-0.2.2.RELEASE.jar
// org.springframework.cloud.alibaba.nacos.registry.NacosServiceRegistry
// 最终的实现类为 com.alibaba.nacos.client.naming.NacosNamingService
//nacos-client-0.2.1-RC1.jar
private final NamingService namingService;
@Override
public void register(Registration registration) {
if (StringUtils.isEmpty(registration.getServiceId())) {
log.warn("No service to register for nacos client...");
return;
}
String serviceId = registration.getServiceId();
Instance instance = new Instance();
instance.setIp(registration.getHost());
instance.setPort(registration.getPort());
instance.setWeight(nacosDiscoveryProperties.getWeight());
instance.setClusterName(nacosDiscoveryProperties.getClusterName());
instance.setMetadata(registration.getMetadata());
try {
namingService.registerInstance(serviceId, instance);
log.info("nacos registry, {} {}:{} register finished", serviceId,
instance.getIp(), instance.getPort());
}
catch (Exception e) {
log.error("nacos registry, {} register failed...{},", serviceId,
registration.toString(), e);
}
}
主要是 namingService.registerInstance(serviceId, instance); 这一句,这句代码是去注册服务的,但是很明显,里面没有 group ,为什么这么说,是因为 NamingService 的实现类 中 有 下面的方法
/* com.alibaba.nacos.client.naming.NacosNamingService *///nacos-client-0.2.1-RC1.jar
@Override
public void registerInstance(String serviceName, Instance instance) throws NacosException {
registerInstance(serviceName, Constants.DEFAULT_GROUP, instance);
}
@Override
public void registerInstance(String serviceName, String groupName, Instance instance) throws NacosException {
if (instance.isEphemeral()) {
BeatInfo beatInfo = new BeatInfo();
beatInfo.setServiceName(NamingUtils.getGroupedName(serviceName, groupName));
beatInfo.setIp(instance.getIp());
beatInfo.setPort(instance.getPort());
beatInfo.setCluster(instance.getClusterName());
beatInfo.setWeight(instance.getWeight());
beatInfo.setMetadata(instance.getMetadata());
beatInfo.setScheduled(false);
long instanceInterval = instance.getInstanceHeartBeatInterval();
beatInfo.setPeriod(instanceInterval == 0 ? DEFAULT_HEART_BEAT_INTERVAL : instanceInterval);
beatReactor.addBeatInfo(NamingUtils.getGroupedName(serviceName, groupName), beatInfo);
}
serverProxy.registerService(NamingUtils.getGroupedName(serviceName, groupName), groupName, instance);
}
不知道 spring-cloud-starter-alibaba-nacos-discovery 是基于什么考虑没有将 group 进行封装(或者我没有找到?),
个人觉得 group 还是有必要的,我的想法是拿来做服务的大类拆分
遇到了同样的困惑
分组是怎么来的,能否在服务配置里面自定义
nacos版本为
2.0.2.RELEASE
application.properties为
## 命名空间## 命名空间需要现在nacos web上的命名空间模块进行新增,得到其ID,使用id进行配置
spring.cloud.nacos.discovery.namespace=f1d75df4-4d0b-404b-8b50-8640fae3351f
## 分组,名称自定义
spring.cloud.nacos.discovery.group=develop-local
这样的话,就可以一定义命名空间和分组了。
以上是 【Java】nacos服务注册如何配置分组? 的全部内容, 来源链接: utcz.com/a/87683.html