2-2.SpringCloud——Eureka注册中心

前面介绍了SpringCloud前期基础
但是服务调用方和服务提供方耦合度太高,提供方出现问题,服务不能用时,致使调用方也会出现问题。
因此Eureka出现, Eureka时一个注册中心,本身就是一个服务,可以做出集群,保证高可用(HA)。

事实上,服务提供方是拥有多个单点服务提供同一个业务功能,以保证高可用。
因此服务提供方需要往Eureka注册自身服务,而服务调用者也会向Eureka注册自身来获取可用的服务。

此外Eureka提供了心跳监听,服务续约,服务下线,服务剔除等,自行研究。这里简单介绍如何部署Eureka注册中心,注册服务,获取服务等。

先把项目列出来
https://github.com/mingweihua/ming-cloud

2-2.SpringCloud——Eureka注册中心_第1张图片
两个Eureka Server也就是Eureka注册中心,两个保证可高用性;
两个Service也就是服务提供方,业务功能一致,提供同一个服务,两个数量也是保证高可用性;
一个Consumer也就是服务消费方/调用方。

版本号在父工程(project)进行管理,子模块(module)只导入相应依赖包

Eureka Server



    
        ming-cloud
        cn.sysu
        0.0.1-SNAPSHOT
    
    4.0.0

    eureka-server

    
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-server
        
    


只需要引入spring-cloud-starter-netflix-eureka-server即可。
编写启动类,添加注解,与Springboot一样。重点是@EnableEurekaServer注解,表明这是Eureka Server

@EnableEurekaServer
@SpringBootApplication
public class EurekaServer {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServer.class, args);
    }

}

最后配置文件

server:
  port: 8011    #DEFAULT_URL = "http://localhost:8761" #
spring:
  application:
    name: eureka-server-ming
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8011/eureka, http://127.0.0.1:8012/eureka

注意点:
(1)不配置端口:默认是8761
(2)spring.application.name是最后会在Eureka Server中application的名字,也是后期调用服务使用的一个application id。
(3)eureka.client.service-url的值为Map,默认key为defaultZone, http://127.0.0.1:8011/eureka, http://127.0.0.1:8012/eureka分别表示向Eureka Server注册自己,以及向另一台Eureka Server注册。

另一台Eureka Server同理配置,端口换成8012。

Eureka Client

也就是服务提供方和消费方,都作为Eureka Client向Eureka Server注册。

服务提供方
引入依赖


     org.springframework.cloud
     spring-cloud-starter-netflix-eureka-client
 

启动类

@EnableDiscoveryClient
@SpringBootApplication
public class  ServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceApplication.class,args);
    }
}

重点是@EnableDiscoveryClient
也可以@EnableEurekaClient,但是使用@EnableEurekaClient,注册中心只能是Eureka,而EnableDiscoveryClient兼容Eureka,也能方便别的注册中心是别的技术实现。

业务功能自己编写

配置文件,向两台Eureka Server注册服务,服务名(application name为service-ming,另一个服务提供方也是类似,端口换成8022)

server:
  port: 8021
  servlet:
    context-path: /service
spring:
  application:
    name: service-ming
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8011/eureka, http://127.0.0.1:8012/eureka

服务消费方

类似配置,不再说了

Controller测试

注入DiscoveryClient

//用于动态拉取相应服务的地址
@Autowired
private DiscoveryClient discoveryClient;

通过application ID也就是上面的application name来获取相应的服务,服务提供方的服务名是service-ming

@RequestMapping("/test2")
public List test2() {
    log.info("动态从Eureka服务器根据application id/name获取服务");
    List instances = discoveryClient.getInstances("service-ming");
    ServiceInstance serviceInstance = instances.get(0);
    String url = serviceInstance.getUri() + "/service/getAllZKData";
    log.info(url);
    List zk_collects = restTemplate.getForObject(url, List.class);
    return zk_collects;
}

测试成功。

至此,就不需要在服务调用方写死提供方相关信息,只需要写明需要什么服务,去注册中心查询相关服务。此外Eureka Server还有很多配置,例如多久识别下线的服务,服务剔除之类的,这些我建议到官网上看,用不到反正就用默认值(约定大于配置)。

Eureka Server的页面如下:(以8011端口的 Eureka Server为例)
2-2.SpringCloud——Eureka注册中心_第2张图片

虽然比较简单,但是抽空写博客给大家参考不容易,欢迎大家点个赞,评论之类的。你们的赞扬和肯定是博主们坚持的动力,谢谢!

你可能感兴趣的:(2.,SpringCloud,eureka,spring,cloud,spring)