扩展其它注册中心

SOP默认使用的注册中心是nacos,可以扩展实现其它注册中心,其中eureka分支是已经扩展好的,使用eureka注册中心。

现在以扩展consul为例,说下具体扩展步骤:

  • 扩展注册中心监听

sop-gateway-common工程下,找到com.gitee.sop.gatewaycommon.route包,可以看到有两个类

EurekaRegistryListenerNacosRegistryListener

这两个类的作用是监听注册中心服务注册,从而触发事件,然后获取新注册的服务。

新建一个类:ConsulRegistryListener,继承BaseRegistryListener

实现onEvent方法,具体内容可参考EurekaRegistryListener

  1. public class ConsulRegistryListener extends BaseRegistryListener {
  2. /**
  3. * 注册中心触发事件,可以从中获取服务<br>
  4. *
  5. * 这个方法做的事情有2个:<br>
  6. *
  7. * 1. 找出新注册的服务,调用pullRoutes方法<br>
  8. * 2. 找出删除的服务,调用removeRoutes方法<br>
  9. *
  10. * @param applicationEvent 事件体
  11. */
  12. @Override
  13. public void onEvent(ApplicationEvent applicationEvent) {
  14. }
  15. }

配置类中新增:

  1. @Bean
  2. @ConditionalOnProperty("spring.cloud.consul.host")
  3. RegistryListener registryListenerConsul() {
  4. return new ConsulRegistryListener();
  5. }

其中@ConditionalOnProperty("spring.cloud.consul.host")的意思是只有配置了spring.cloud.consul.host属性,这个Bean才会被Spring注入

sop-gateway工程添加Spring Cloud Consul相关依赖,配置文件新增consul配置

  • 扩展admin实现

找到sop-admin-server工程下com.gitee.sop.adminserver.service包,可以看到有两个类,RegistryServiceEurekaImplRegistryServiceNacosImpl它们实现了com.gitee.sop.adminserver.service.RegistryService接口,因此我们要新建一个consul对应的类

新建RegistryServiceConsulImpl,然后实现RegistryService接口中的方法,具体可参考RegistryServiceEurekaImpl

  1. public class RegistryServiceConsulImpl implements RegistryService {
  2. }

打开com.gitee.sop.adminserver.config.WebConfig

新增一条配置

  1. /**
  2. * 当配置了registry.name=eureka生效。
  3. *
  4. * @return
  5. */
  6. @Bean
  7. @ConditionalOnProperty(value = "registry.name", havingValue = "consul")
  8. RegistryService registryServiceEureka() {
  9. return new RegistryServiceConsulImpl();
  10. }

application配置文件新增一条配置:

  1. registry.name=consul