阿里云企业级互联网架构实践系列-EDAS 开发(续)

1. 如何注册到轻量级配置中心

前提: 关闭windows 防火墙,可以ping 通 EDAS所在IP

修改配置:假设EDAS 轻量级配置中心IP 是 10.10.10.10

修改hosts 文件 添加配置如下:

10.10.10.10 jmenv.tbsite.net

添加jvm 参数:

-Dvipserver.server.port=8080

-Daddress.server.domain=10.10.10.10

-Daddress.server.port=8080

-Dvipserver.client.port=8080

-Dpandora.location=D:/hsf.sar.jar

如果本地有多个IP可以通过需要配置一下hosts 来指定注册的IP

先打开 cmd 输入hostname 命令 获取本机名称,假设是 computer1

假设需要使用的本地IP是 11.111.1.1(确保此IP和EDAS的网络之间是同的)

在hosts 文件中添加如下配置:

11.111.1.1 computer1

-Dpandora.location=D:/hsf.sar.jar

指定的是潘多拉地址

2. 如何使用轻量级配置中心的配置功能

a) 程序添加配置

添加需要的配置项:

1. 找到 ConfigCenter类,添加配置中心需要的groupID和DataID

其中groupId:是项目的包名称,确保唯一,建议网上国网统一使用 com.sgcc.osg 作为groupID。dataID,用于标识单个配置项。

阿里云企业级互联网架构实践系列-EDAS 开发(续)

2. 找到EDASConfigContextRefresher 在 registerDiamondListenersForApplications方法中添加 addListener第一参数是 ConfigCenter.DATA_ID,第二个参数是ConfigCenter.GROUP_ID。

阿里云企业级互联网架构实践系列-EDAS 开发(续)
  1. 找到EDASPropertySourceLocator 在locate方法中添加

loadConfiguration(compositePropertySource, environment, ConfigCenter.DATA_ID, ConfigCenter.GROUP_ID);

loadConfiguration方法前两个参数固定, 后面是 之前在ConfigCenter中添加的DATA_ID, 和GROUP_ID。

阿里云企业级互联网架构实践系列-EDAS 开发(续)

b) 轻量级验证配置

在本地开发的时候,应用启动前需要先在轻量级配置中心。添加配置项。

点击添加:

[图片上传失败...(image-8cefb1-1597155336559)]

在弹出框中输入在本地ConfigCentre.java 中配置的 groupID, 和dataId输入进去。

content 里面可以添加任意键值对。

阿里云企业级互联网架构实践系列-EDAS 开发(续)

c) 程序中获取配置

@RestController

@RefreshScope //需要 动态刷新必加

public class Demo{

@Value(“${key1}”)

private String key1;

@Value(“${key2}”)

private String key2;

}

d) 备注:

配置项:如下图每一个groupid, dataId,和content 对应一个配置项

阿里云企业级互联网架构实践系列-EDAS 开发(续)

3. 轻量级配置中心无法开启,开启时 一闪就自动关闭

分发 轻量级配置中心的时候 通过 压缩文件分发,不要copy 解压后的文件夹

4. 如何处理服务启动后分布式服务总线应用列表无法显示

如果应用列表没有数据,不能说明应用无法注册到分布式服务总线,而是应用启动失败,或者EDAS鉴权配置有问题

l 检查应用启动日志,查看是否正常启动。

如果抛出其他异常导致无法启动需要联系业务同学确认。

l 如果没有报错需要确认EDAS_SERVICE_ID 环境变量是否过程, 不能超过36

5. 如何处理服务启动后分布式服务总线服务列表为空

如果分布式服务总线的 服务列表是空的,就说明这个微服务没有注册到分布式服务总线

l 应用正常启动后(通过启动日志判断,出现pandora started说明启动完成),

l 查看 /etc/resolv.conf 确保EDAS的nameserver 放在首位。

l 查看 /home/admin/logs/vipsrv-logs/vipclient.log 中

l 如果有 403 access denied. 说明是容器所在宿主机的时间没有同步。需要联系云操系统的同事进行时间同步。时间同步后重启容器就可以注册成功。

l 如果有 error code 500 需要检查dncs-server 服务是否正常。

6. ** 如何检测dncs-server服务是否正常**

l 登录edas 物理机

l docker ps|grep dncs-server

l docker exec -it docker_id bash

l cd /home/admin/bin

l 运行sh chekc_dncs.sh

l 如果 check_dncs.sh 运行异常说明dncs-server出现问题。

7. ** 如何处理dncs-server服务的异常**

l 登录edas 物理机

l docker ps|grep dncs-server

l docker exec -it docker_id bash

l cd /home/admin/bin

l 运行sh chekc_dncs.sh

l 如果 check_dncs.sh 运行异常说明dncs-server出现问题

l 出现异常后可以进行 docker restart docker_id 重启dncs-server 容器,容器重启后大概需要3-7分钟启动dncs-server 的业务,可以使用/home/admin/bin/check_dncs.sh 检查是否启动完成

8. ** 如何判断dncs-server服务的异常的原因**

l 登录edas 物理机

l docker ps|grep dncs-server

l docker exec -it docker_id bash

l cd /home/admin/bin

l 运行sh chekc_dncs.sh

l 如果 check_dncs.sh 运行异常说明dncs-server出现问题

l dmesg |grep java

l 如果出现Out of memory: Kill process xxxx(java) 说明 dncs-server 进程由于OOM被linux 系统kill

9. 注册到edas中不集群之间的服务是否可以互相调用

l edas 鉴权体系的隔离不同账户之间不可能互相访问

l 不同集群使用不同的k8s集群做实现,不同k8s 集群的网络是不可以相通的

10. edas 负载均衡的机制是如何做的

l 如果使用HSF协议,HSF协议内部兼容了服务的负载均衡

l 如果使用spring cloud 框架下的RESTful 协议,由spring cloud 的Ribbon组件提供负载均衡

11. 服务调用失败的重试机制如何实现

l 如果使用spring cloud 框架下的RESTful 协议,由spring cloud 的Ribbon组件重试,可以在application.properties 中配置ribbon 的重试策略

12. edas环境下如何使用Junit单元测试

由于edas应用的启动依赖于pandora 容器所有需要在Junit 测试类上面添加如下配置引入pandora 容器的启动:

  1. @RunWith(PandoraBootRunner.class)

  2. @DelegateTo(SpringJUnit4ClassRunner.class)

  3. // 加载测试需要的类,一定要加入 Spring Boot 的启动类,其次需要加入本类。

  4. @SpringBootTest(classes = {ProviderApplication.class, JUnitTest.class })

  5. @Component