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

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

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

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

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

在这里插入图片描述
两个Eureka Server也就是Eureka注册中心,两个保证可高用性;
两个Service也就是服务提供方,业务功能一致,提供同一个服务,两个数量也是保证高可用性;
一个Consumer也就是服务消费方/调用方。

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

Eureka Server

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ming-cloud</artifactId>
        <groupId>cn.sysu</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>eureka-server</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

</project>

只需要引入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注册。

服务提供方
引入依赖

<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
 </dependency>

启动类

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

测试成功。

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

Eureka Server的页面如下:(以8011端口的 Eureka Server为例)
在这里插入图片描述

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值