注:EurekaServer中的成员需要相互注册
1.创建微服务模块
2.pom.xml文件加入对应依赖
<!--
引入
eureka-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
等其他依赖
3.
创建
resources/application.yml
server
:
port
:
9002
eureka
:
instance
:
hostname
: eureka9002.com
client
:
register-with-eureka
:
false
fetch-registry
:
false
service-url
:
defaultZone
: http://eureka9001.com:9001/eureka/
#
相 互 注 册
,
这 里 写
eureka9001.com
4.创建主启动类
@EnableEurekaServer 别忘记加到主启动类 启动服务
搭建会员中心服务提供方
-
集群
注:
1.
因为
member-service-provider-10000
和
member-service-provider-10002
作为一个集
群提供服务
,
因此需要将
spring.application.name
进行统一(
这样在注册表中一个key 对应多个地址 这样消费方通过统一的别名进行负载均衡调用)
在消费服务中要使用注解@LoadBalanced 赋予 RestTemplate 负载均衡的能力
@Configuration
public class
CustomizationBean
{
@Bean
@LoadBalanced
public
RestTemplate
getRestTemplate
() {
return new
RestTemplate();
}
}
DiscoveryClient
消费方希望获取 Eureka Server 服务注册信息 ---DiscoveryClient
1在controller中增加代码
@Resource
private
DiscoveryClient
discoveryClient
;
@GetMapping
(value =
"/member/consumer/discovery"
)
public
Object
discovery
() {
List
<
String
> services =
discoveryClient
.getServices();
for
(
String element
: services) {
System.out.println(
"======== 服 务 名 "
+
element
+
"======================="
);
List
<
ServiceInstance
> instances =
discoveryClient
.getInstances(
element
);
for
(
ServiceInstance instance
: instances) {
System.out.println(
instance
.getServiceId() +
"
\t
"
+
instance
.getHost()
+
"
\t
"
+
instance
.getPort() +
"
\t
"
+
instance
.getUri());
}
}
return this
.
discoveryClient
;
}
1.
discoveryClient
.getServices();得到服务名(集合 注册中心key小写)
2.
discoveryClient
.getInstances(服务名
) 得到实例 ; 该实例
个人理解为服务中心一行封装为对象
3.通过该实例拿到想要的信息
2.在主启动类增加注解
//@EnableDiscoveryClient
注解启用服务发现
@EnableDiscoveryClient
注:1. 在引入 DiscoveryClient 时,不要引入错误的包
正确的包
:
import
org.springframework.cloud.client.discovery.DiscoveryClient
;
错误的包
:
import
com.netflix.discovery.DiscoveryClient
;