1、将服务注册到eureka server
首先在客户端的服务里添加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
然后在app里添加客户端注解:
@EnableEurekaClient #仅对eureka可用
或者:
@EnableDiscoveryClient #可以发现别的客户端组件,不限于eureka
然后修改配置文件application.yml:
spring:
application:
name: microservice-h2 #全部小写,注册于eureka server上的服务名称,不写名称显示为UNKNOW
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka #eureka server位置
启动服务之后,查看server如下:
2、调整主机名为IP显示
在yml中添加以下配置:
eureka:
instance:
prefer-ip-address: true #默认是false,设为true之后当鼠标放在服务状态上之后显示服务的ip
重启服务,效果如下图:
3、调整状态显示的名称
在yml中添加以下配置:
eureka:
instance:
instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
重启服务,效果如下图:
和上面的图做个对比,发现前面的主机名没有了,这是因为默认的"eureka.instance.instance-id"是:
${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}}
这里修改之后将前面的主机名给去掉了。
4、添加安全验证
在yml中添加以下配置:
spring:
security:
user:
name: user
password: password
eureka:
client:
service-url:
defaultZone: http://user:password@localhost:8761/eureka #把eureka部到哪个url下
修改pom.xml,添加security依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
重启项目,就会发现登录eureka server就需要登录,如下图:
用户名,密码就是yml文件里配置的用户名和密码。
eureka server访问的url前加上user:password@即可实现在访问时先登录,此处的user要和spring.security.user.name的值保持一致;password和spring.security.user.password保持一致。
5、客户端添加认证
添加认证之后的服务端,客户端是无法注册上去的,会报出如下错误:
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112) ~[eureka-client-1.8.8.jar:1.8.8]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.8.8.jar:1.8.8]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) ~[eureka-client-1.8.8.jar:1.8.8]
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.8.8.jar:1.8.8]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.8.8.jar:1.8.8]
at com.netflix.discovery.DiscoveryClient.getAndStoreFullRegistry(DiscoveryClient.java:1051) [eureka-client-1.8.8.jar:1.8.8]
at com.netflix.discovery.DiscoveryClient.fetchRegistry(DiscoveryClient.java:965) [eureka-client-1.8.8.jar:1.8.8]
at com.netflix.discovery.DiscoveryClient.<init>(DiscoveryClient.java:414) [eureka-client-1.8.8.jar:1.8.8]
at com.netflix.discovery.DiscoveryClient.<init>(DiscoveryClient.java:269) [eureka-client-1.8.8.jar:1.8.8]
...
所以修改客户端的yml如下:
eureka:
client:
service-url:
defaultZone: http://user:password@localhost:8761/eureka
此处的用户名和密码要和server中设置的用户名和密码保持一致。
重启服务之后就会发现服务已注册到eureka server上: