微服务之注册中心Eureka(一)

一、前言

注册中心是微服务架构中基础服务之一,主要是将微服务中的服务地址等信息注册到注册中心,以便使用。
1、eureka中的三大角色
在这里插入图片描述
(1)Service Provider服务提供者 (Server):
服务启动后向注册中心注册自己的一个实例
定期向RegistryCenter发送心跳(TTL), 证明服务正常
服务关闭时向注册中心注销自己(TTL)
(2) Service Consumer服务消费者(Client):
服务启动后RegistryCenter订阅所需要使用的服务(Server), 并缓存到实例列表中。
向对应服务(Server)发起调用时,从内存中的该服务的实例列表选择一个,进行远程调用。
服务关闭时向RegistryCenter取消订阅。
(3) Service Registry Center注册中心:
注册中心一定时间内容未检测到服务提供者的心跳(TTL)时将服务从实例列表移除。
服务的实例列表发生变化(新增或者移除)时,通知订阅该服务的 Consumer,从而让 Consumer 能够刷新本地服务列表缓存。
2、CAP 理论简述
在这里插入图片描述CAP理论是分布式架构中重要理论:
一致性(Consistency) (所有节点在同一时间具有相同的数据)
可用性(Availability) (保证每个请求不管成功或者失败都有响应)
分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)
由于C与A的特性无法共存.CAP 不可能都取,只能取其中2个。
AP:对等部署的多写一直性
CP:基于leader的非对等部署的单点写一致
EUREKA是一种对等部署的多写一致的注册中心
3、注册中心比较
在这里插入图片描述
4、其它
(1)eureka遵循AP原则,无主从节点之分,每一个节点都是对等的,是一种去中心化的注册中心
(zookeeper是一种中心化的注册中心,通过选举的方式决定master节点,当master节点挂了的时候在选举过程中,将会导致服务不可用,需要一些其它的解决办法)
(2)eureka支持多节点部署,因为每个eureka注册中心都是对等的,所以只要集群中还有一个节点存活,服务就可用。
(3)Eureka的自我保护机制:如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,这时Eureka不在从注册表中移除因为长时间没有收到心跳而过期的服务;但此时仍然能够接受新服务的注册和查询请求,但是不会同步到其它节点(保证当前节点可用)。在恢复后在将注册信息同步到其它注册中心中。
(4)上述第三点也是问题所在,出现了上述情况,将无法保证每个注册中心的写一致。

二、开发环境

1、spring-boot 2.2.2
2、spring-cloud Hoxton.SR12
3、jdk 1.8
4、java开发环境
5、idea
6、maven

三、单节点注册中心

1、在idea中新建一个maven project
2、在项目pom中添加公共依赖,项目pom文件如下:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.zlc</groupId>
    <artifactId>micro-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>micro-service</name>
    <description>spring cloud action</description>
    <!-- 父模块公共配置-->
    <dependencyManagement>
        <dependencies>
            <!--spring cloud 依赖-->
            <!--spring boot 与最适spring cloud 版本关系对照可参考如下地址(建议火狐浏览器打开)-->
            <!--https://start.spring.io/actuator/info -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR12</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--eureka 注册中心依赖-->
            <dependency>
                <groupId>cn.zlc</groupId>
                <artifactId>eureka-service</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <modules>
        <!--注册中心服务-->
        <module>eureka-service</module>
    </modules>

    <properties>
        <!--jdk版本-->
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!-- spring boot 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--测试依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3、新建一个注册中心module名为eureka-service,其父pom为项目pom,pom文件内容如下:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.zlc</groupId>
        <artifactId>micro-service</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>eureka-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka-service</name>
    <packaging>jar</packaging>
    <description>eureka 注册中心</description>

    <dependencies>
        <!--eureka 注册中心-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

4、开启注册中心服务(在启动类上添加EnableEurekaServer注解即可)

@SpringBootApplication
@EnableEurekaServer
public class EurekaServiceApplication {

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

}

5、使用yaml文件配置一下eureka启动的端口和应用名称
ps:个人比较爱使用yaml文件,不是properties文件,所以删除了默认的application.properties文件
application.yml文件配置如下:

server:
  # 启动地址
  address: 127.0.0.1
  # 启动端口
  port: 8080
  servlet:
    session:
      # session 超时时间配置,默认30m
      timeout: 600
# spring 配置相关
spring:
  # 应用配置
  application:
    # 应用名称配置
    name: eureka-service

6、可以先启动一下Eureka注册中心,看一下效果

2021-07-26 11:03:19.879  INFO 1048 --- [      Thread-49] o.s.c.n.e.server.EurekaServerBootstrap   : isAws returned false
2021-07-26 11:03:19.880  INFO 1048 --- [      Thread-49] o.s.c.n.e.server.EurekaServerBootstrap   : Initialized server context
2021-07-26 11:03:19.925  INFO 1048 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2021-07-26 11:03:19.927  INFO 1048 --- [           main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8080
2021-07-26 11:03:21.530  INFO 1048 --- [           main] c.z.e.EurekaServiceApplication           : Started EurekaServiceApplication in 23.043 seconds (JVM running for 27.58)
2021-07-26 11:03:23.160  INFO 1048 --- [2)-172.16.1.115] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-07-26 11:03:23.160  INFO 1048 --- [2)-172.16.1.115] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2021-07-26 11:03:23.179  INFO 1048 --- [2)-172.16.1.115] o.s.web.servlet.DispatcherServlet        : Completed initialization in 19 ms
2021-07-26 11:03:23.931  INFO 1048 --- [nfoReplicator-0] c.n.d.s.t.d.RedirectingEurekaHttpClient  : Request execution error. endpoint=DefaultEndpoint{ serviceUrl='http://localhost:8761/eureka/}, exception=java.net.ConnectException: Connection refused: connect stacktrace=com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect
	at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187)
	at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123)
	at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27)
	at com.sun.jersey.api.client.Client.handle(Client.java:652)
	at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682)
	at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
	at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570)
	at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.register(AbstractJerseyEurekaHttpClient.java:57)

7、访问 http://localhost:8080/在这里插入图片描述
三、注册中心配置
1、在application.yml文件中添加eureka配置

server:
  #address: 127.0.0.1  # 启动地址,不是应用启用不是下面的配置地址则应用无法启动
  port: 8010   # 启动端口
  servlet:
    session:
      timeout: 600 # session 超时时间配置,默认30m

spring:  # spring 配置相关
  application: # 应用配置
    name: eureka-service # 应用名称配置
    #profiles:
    #active:
eureka: # 注册中心Eureka配置
  instance:
    #配置eureka.instance.preferIpAddress = true  可以防止注册中心互相注册注册不上问题  :${random.long(1,100)}
    preferIpAddress: true
    # 唯一标识
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}}
    # 服务续约:在注册完服务后,服务提供者会维持一个心跳用来持续告诉Eureka Server我还活着,以防止Eureka Server的“剔除任务”将服务实例从服务列表中排除出去,我们将该操作称为服务续约(Renew)。
    # 关于服务续约有两个重要的属性,我们可以关注并根据需要来进行调整:
    lease-expiration-duration-in-seconds: 30  # 服务失效的时间,默认90秒。
    lease-renewal-interval-in-seconds: 120 # 服务续约任务的调用间隔时间,默认30秒。
    hostname: 127.0.0.1  #  本地可以是localhost,测试环境以及生产环境需要修改
  server:
    eviction-interval-timer-in-ms: 5000 #(单位毫秒,默认是60*1000)eureka server清理无效节点的时间间隔,默认60000毫秒,即60秒
    enable-self-preservation: true   #是否开启保护模式,默认为true ,保护模式就是确保不被无缘无故移除(网络故障但服务正常等情况)
  client:
    register-with-eureka: true  #  是否向注册中心注册自己,默认为true
    fetch-registry: true  # 是否检索服务
    serviceUrl:  # 注册中心地址
      # 单节点配置(没有权限验证)
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

2、重新启动eureka(如果启动前报错,因为注册中心还没有给自己注册进去)

2021-07-26 12:30:26.983  INFO 7656 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 8ms
2021-07-26 12:30:31.988  INFO 7656 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 4ms
2021-07-26 12:30:36.993  INFO 7656 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 5ms
2021-07-26 12:30:41.999  INFO 7656 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 6ms
2021-07-26 12:30:47.010  INFO 7656 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 10ms
2021-07-26 12:30:52.011  INFO 7656 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 1ms
2021-07-26 12:30:57.028  INFO 7656 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 16ms
2021-07-26 12:31:02.038  INFO 7656 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 10ms
2021-07-26 12:31:07.040  INFO 7656 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 1ms
2021-07-26 12:31:12.048  INFO 7656 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 7ms

3、访问 eureka: http://127.0.0.1:8010/
在这里插入图片描述
4、Eureka面板与项目启动端口一致

四、eureka客户端

1、eureka客户端取名叫做eureka-clinet,在pom文件中添加一个web依赖,可以让程序正常启动以后不关闭,pom文件如下:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.zlc</groupId>
        <artifactId>micro-service</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>eureka-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka-client</name>
    <packaging>jar</packaging>
    <description>Eureka-client 注册中心客户端</description>

    <dependencies>
        <!-- eureka客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!-- web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2、开启eureka客户端注解

/**
 * @author  jacob
 * EnableEurekaClient 开启eureka 客户端连接
 */
@EnableEurekaClient
@SpringBootApplication
public class EurekaClientApplication {

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

}

3、配置eureka客户端

server:
  port: 8020

spring:
  application:
    name: eureka-client-service
  #profiles:
    #active: dev,eureka-client1
logging:
  level:
    org:
      springframework:
        cloud:
          loadbalancer:
            config:
              BlockingLoadBalancerClientAutoConfiguration: error

# 注册中心配置  :${random.long(1,100)
eureka:
  instance:
    preferIpAddress: true
    #instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
    instance-id: ${spring.application.name}:${server.port}
    lease-expiration-duration-in-seconds: 30
    lease-renewal-interval-in-seconds: 10
  client:
    register-with-eureka: true
    fetch-registry: false
    serviceUrl:
      defaultZone: http://127.0.0.1:8010/eureka/

4、先启动eureka-service,然后在启动eureka-client,正常启动成功后访问注册中心
http://127.0.0.1:8010/
在这里插入图片描述
两个服务全部注册到注册中心了

五、Eureka启动中的警告处理

1、

WARN 4528 --- [           main] o.s.boot.actuate.endpoint.EndpointId     : Endpoint ID 'service-registry' contains invalid characters, please migrate to a valid format.

这个已经有issue了,可以暂时忽略
2、

WARN 4528 --- [           main] c.n.c.sources.URLConfigurationSource     : No URLs will be polled as dynamic configuration sources.

解决办法:
(1)在项目中添加一个空的config.properties文件
(2)通过启动参数“-Darchaius.configurationSource.additionalUrls”制定配置文件

-Darchaius.configurationSource.additionalUrls="classpath:extra.properties,file:///home/user/other-extra.properties"

(3)如果不使用archaius组件前提下,排除netflix-archaius引入。如还引入了其他netflix组件,可能也会有archaius引入,需要一起exclusion。

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <exclusions>
                <!--fix No URLs will be polled as dynamic configuration sources. warring-->
                <!-- netflix-archaius包,默认需要加载配置源,无法加载配置元导致系统警告。-->
                <exclusion>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-archaius</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

3、

 WARN 7036 --- [           main] ockingLoadBalancerClientRibbonWarnLogger : You already have RibbonLoadBalancerClient on your classpath. It will be used by default. As Spring Cloud Ribbon is in maintenance mode. We recommend switching to BlockingLoadBalancerClient instead. In order to use it, set the value of `spring.cloud.loadbalancer.ribbon.enabled` to `false` or remove spring-cloud-starter-netflix-ribbon from your project.

经上述源码分析我们应该很清楚为什么会打印这么一条warn警告日志了,这是官方想推荐自己的负载均衡客户端BlockingLoadBalancerClient,但是BlockingLoadBalancerClient还有很多不完善的地方,还是老老实实的用Ribbon吧;警告对我们使用ribbon没有任何影响,如果看着不舒服的话可以关掉,通过配置当前类日志级别的方式可以做到:

4、如果排除了上面的

  <exclusion>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
  </exclusion>

则会产生一个新的警告:

Spring Cloud LoadBalancer is currently working with the default cache. You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath.

解决办法:
(1)

spring.cloud.loadbalancer.cache.enabled=false

(2)添加依赖

<!-- https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine -->
    <dependency>
        <groupId>com.github.ben-manes.caffeine</groupId>
        <artifactId>caffeine</artifactId>
        <version>2.8.8</version>
    </dependency>

五、增强eureka安全
上面的操作eureka客户端通过http连接了eureka注册中心,不能够保证安全性,我们可以通过一些简单的配置保护我们的注册中心
1、为eureka添加security保证安全

 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-security</artifactId>
 </dependency>

2、修改配置文件,添加security用户名和密码用户权限访问

server:
  address: 127.0.0.1  # 启动地址,不是应用启用不是下面的配置地址则应用无法启动
  port: 8010   # 启动端口
  servlet:
    session:
      timeout: 600 # session 超时时间配置,默认30m

spring:  # spring 配置相关
  application: # 应用配置
    name: eureka-service # 应用名称配置
  security:
    user:
      name: yourusername
      password: pw123456
    #profiles:
    #active:
# 日志配置
logging:
  level:
    org:
      springframework:
        cloud:
          loadbalancer:
            config:
              BlockingLoadBalancerClientAutoConfiguration: error
eureka: # 注册中心Eureka配置
  instance:
    #配置eureka.instance.preferIpAddress = true  可以防止注册中心互相注册注册不上问题  :${random.long(1,100)}
    preferIpAddress: true
    # 唯一标识(可以通过服务名+端口或者ip+端口的方式指定)
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
    # 服务续约:在注册完服务后,服务提供者会维持一个心跳用来持续告诉Eureka Server我还活着,以防止Eureka Server的“剔除任务”将服务实例从服务列表中排除出去,我们将该操作称为服务续约(Renew)。
    # 关于服务续约有两个重要的属性,我们可以关注并根据需要来进行调整:
    lease-expiration-duration-in-seconds: 30 # 服务续约任务的调用间隔时间,默认30秒。
    lease-renewal-interval-in-seconds: 90  # 服务失效的时间,默认90秒。
    hostname: 127.0.0.1  #  本地可以是localhost,测试环境以及生产环境需要修改
  server:
    eviction-interval-timer-in-ms: 120000 #(单位毫秒,默认是60*1000)eureka server清理无效节点的时间间隔,默认60000毫秒,即60秒
    enable-self-preservation: true   #是否开启保护模式,默认为true ,保护模式就是确保不被无缘无故移除(网络故障但服务正常等情况)
  client:
    register-with-eureka: true  #  是否向注册中心注册自己,默认为true
    fetch-registry: true  # 是否检索服务
    serviceUrl:  # 注册中心地址
      # 单节点配置(没有权限验证)
      #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:${server.port}/eureka/

3、添加一个websecurity配置类

package cn.zlc.eurekaservice.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

/**
 * 当配置了security后,如有没有用户名和密码,则服务无法注册到注册中心,
 * 目前在配置文件中配置的方法已经过时了
 * @author : jacob
 **/
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        // 关闭 csrf
        http.csrf().disable();
    }
}

4、启动eureka-service,访问http://127.0.0.1:8010/ 需要我们输入用户名和密码成功登录以后才能查看eureka信息。
在这里插入图片描述
5、输入在配置文件中配置的用户名和密码,成功登录后我们可以看到注册中心有eureka-service
在这里插入图片描述
6、eureka-client 客户端连接注册中心,修改配置如下:

server:
  port: 8020

spring:
  application:
    name: eureka-client-service
  security:
    user:
      name: yourusername
      password: pw123456
    #profiles:
    #active: dev,eureka-client1
logging:
  level:
    org:
      springframework:
        cloud:
          loadbalancer:
            config:
              BlockingLoadBalancerClientAutoConfiguration: error

# 注册中心配置  :${random.long(1,100)
eureka:
  instance:
    preferIpAddress: true
    instance-id: ${spring.cloud.client.ip-address}:${server.port}:${spring.application.name}
    lease-expiration-duration-in-seconds: 30
    lease-renewal-interval-in-seconds: 10
    hostname: 127.0.0.1
  client:
    register-with-eureka: true
    fetch-registry: false
    serviceUrl:
      #defaultZone: http://127.0.0.1:8010/eureka/  # 单节点无权限
      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@127.0.0.1:8010/eureka/ #单节点有权限

7、程序正常启动成功,访问http://127.0.0.1:8010/ 可以看到两个服务都在注册中心中
在这里插入图片描述
六、声明
本文首发于香菜喵,打开微信随时随地读,获取更多资源文章下方 ↓ ↓ ↓

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵喵@香菜

感谢观众老爷送的一发火箭!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值