09 搭建Eureka注册中心

(1) 创建shop_eureka_server子模块

在 shop_parent 下创建子模块 shop_eureka_server 

(2) 引入maven坐标

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

(3) 配置application.yml

server:
 port: 8761
eureka:
 instance:
   hostname: localhost
 client:
   registerWithEureka: false  
   fetchRegistry: false
   serviceUrl:
     defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

registerWithEureka: 是否将自己注册到Eureka服务中,本身就是所有无需注册

fetchRegistry : 是否从Eureka中获取注册信息

serviceUrlEureka: 客户端与Eureka服务端进行交互的地址

(4) 配置启动类

在 cn.muziwk.eureka 下创建启动类 EurekaServerApplication

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
 public static void main(String[] args) {
     SpringApplication.run(EurekaServerApplication.class, args);
 }
}

EnableEurekaServer : 激活Eureka Server端配置

服务注册中心管理后台

打开浏览器访问http://localhost8761即可进入EurekaServer内置的管理控制台,显示效果如下

image-20211224212958777.png

服务注册到Eureka注册中心

商品服务注册

(1) 商品模块中引入坐标

在 shop_service_product 的pom文件中添加eureka client的相关坐标

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

(2) 配置application.yml文件

在工程的 application.yml 中添加Eureka Server的主机地址

eureka:
 client:
   serviceUrl: # eureka server的路径
     defaultZone: http://localhost:8761/eureka/
 instance:
   prefer-ip-address: true #使用ip注册

(3) 修改启动类添加服务注册注解

@SpringBootApplication
//@EnableDiscoveryClient
//@EnableEurekaClient
public class UserApplication {
 public static void main(String[] args) {
    SpringApplication.run(UserApplication.class, args);
 }
}

从Spring Cloud Edgware版本开始, @EnableDiscoveryClient 或 @EnableEurekaClient 可 省略。只需加上相关依赖,并进行相应配置,即可将微服务注册到服务发现组件上。

订单服务注册

和商品微服务一样,只需要引入坐标依赖,在工程的 application.yml 中添加Eureka Server的主机地址 即可

用户服务注册

和商品微服务一样,只需要引入坐标依赖,在工程的 application.yml 中添加Eureka Server的主机地址 即可

Eureka中的自我保护

微服务第一次注册成功之后,每30秒会发送一次心跳将服务的实例信息注册到注册中心。通知 Eureka Server 该实例仍然存在。如果超过90秒没有发送更新,则服务器将从注册信息中将此服务移除。 Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况 (在单机调试的时候很容易满足,实际在生产环境上通常是由于网络不稳定导致),Eureka Server会 将当前的实例注册信息保护起来,同时提示这个警告。保护模式主要用于一组客户端和Eureka Server 之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务) 验证完自我保护机制开启后,并不会马上呈现到web上,而是默认需等待 5 分钟(可以通过 eureka.server.wait-time-in-ms-when-sync-empty 配置),即 5 分钟后你会看到下面的提示信息:


image-20211224213435243.png

如果关闭自我保护

通过设置 eureka.enableSelfPreservation=false 来关闭自我保护功能。

Eureka中的元数据

Eureka的元数据有两种:标准元数据和自定义元数据。

  • 标准元数据:主机名、IP地址、端口号、状态页和健康检查等信息,这些信息都会被发布在服务注 册表中,用于服务之间的调用。
  • 自定义元数据:可以使用eureka.instance.metadata-map配置,符合KEY/VALUE的存储格式。这 些元数据可以在远程客户端中访问。

在程序中可以使用DiscoveryClient 获取指定微服务的所有元数据信息

@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class RestTemplateTest {
 
 @Autowired
 private DiscoveryClient discoveryClient;
 @Test
 public void test() {
 //根据微服务名称从注册中心获取相关的元数据信息
 List<ServiceInstance> instances = discoveryClient.getInstances("shop�service-product");
 for (ServiceInstance instance : instances) {
    System.out.println(instance);
 }
 }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容