Eureka服务注册与发现
看图做题
1. 思路
Eureka Server : 服务注册中心
Eureka Client : 服务提供者/消费者
2. 实现步骤
2.1 服务注册中心
-
pom 引入依赖
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependenciey>
-
yaml 配置文件
server: port: 7001 eureka: instance: #eureka服务端的实例名称 hostname: localhost client: #false 表示不向注册中心注册自己 register-with-eureka: false #false 表示自己就是注册中心,职责就是维护服务实例,并不需要去检索服务 feth-registry: false service-url: #设置与 eureka server 交互的地址,查询服务和注册服务都需要以来这个地址 defaultZone: http://{eureka.instance.hostname}:${server.port}/eureka
-
主启动类添加注解: @EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7001
{
public static void main(String[] args)
{
SpringApplication.run(EurekaMain7001.class, args);
}
}
2.2 注册Client端,【服务提供端、服务消费端】
-
pom 引入依赖
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependenciey>
-
yaml 配置文件
server: application: #Eureka服务中心,显示并使用的名称 name: cloud-service-name server: port: 8001 eureka: client: #表示向注册中心EurekaServer注册自己 默认为ture register-with-eureka: true #向EurekaServer注册中心,抓取已注册信息,默认为true feth-registry: true service-url: #注册中心的地址,集群模式下,多个地址用英文逗号','分开 defaultZone: http://{eureka.instance.hostname}:${server.port}/eureka instance: # 实例id instance-id: payment8001 # 访问路径显示IP地址 prefer-ip-address: true
-
主启动类添加注解: :@EnableEurekaClient
@SpringBootApplication @EnableEurekaClient public class EurekaMain8001 { public static void main(String[] args) { SpringApplication.run(EurekaMain8001.class, args); } }
2.3 集群配置
1. 服务注册中心(集群)
1.1 修改host文件配置(在一台主机模拟三台服务器)
windows 目录:C:\Windows\System32\drivers\etc\hosts,在末尾处添加如下映射配置。
127.0.0.1 eureka7001
127.0.0.1 eureka7002
1.2 修改yaml文件(服务注册中心相互注册)
1.2.1 服务注册中心:7001
server:
port: 7001
eureka:
instance:
#eureka服务端的实例名称
hostname: eureka7001
client:
#false 表示不向注册中心注册自己
register-with-eureka: false
#false 表示自己就是注册中心,职责就是维护服务实例,并不需要去检索服务
feth-registry: false
service-url:
#将自己注册到另外的服务注册中心实例中
defaultZone: http://eureka7002:7002/eureka
1.2.2 服务注册中心:7002
server:
port: 7002
eureka:
instance:
#eureka服务端的实例名称
hostname: eureka7001
client:
#false 表示不向注册中心注册自己
register-with-eureka: false
#false 表示自己就是注册中心,职责就是维护服务实例,并不需要去检索服务
feth-registry: false
service-url:
#将自己注册到另外的服务注册中心实例中
defaultZone: http://eureka7001:7001/eureka
2. Eureka Client客户端(集群)
2.1 yaml配置
相同服务间的服务名称保持一致 server.application.name ,端口号不同。
客户端:8001
server:
application:
#Eureka服务中心,显示并使用的名称
name: cloud-service-name
server:
port: 8001
eureka:
client:
#表示向注册中心EurekaServer注册自己 默认为ture
register-with-eureka: true
#向EurekaServer注册中心,抓取已注册信息,默认为true
feth-registry: true
service-url:
#注册中心的地址,集群模式下,多个地址用英文逗号','分开
defaultZone: http://eureka7001:7001/eureka,http://eureka7002:7002/eureka
instance:
# 实例id
instance-id: payment8001
# 访问路径显示IP地址
prefer-ip-address: true
客户端:8002
server:
application:
#Eureka服务中心,显示并使用的名称
name: cloud-service-name
server:
port: 8002
eureka:
client:
#表示向注册中心EurekaServer注册自己 默认为ture
register-with-eureka: true
#向EurekaServer注册中心,抓取已注册信息,默认为true
feth-registry: true
service-url:
#注册中心的地址,集群模式下,多个地址用英文逗号','分开
defaultZone: http://eureka7001:7001/eureka,http://eureka7002:7002/eureka
instance:
# 实例id
instance-id: payment8002
# 访问路径显示IP地址
prefer-ip-address: true
2.2 消费端 URL地址改调用服务名
public class TestController
{
//private static final String SERVER_URL="http://127.0.0.1:7744";
private static final String SERVER_URL="http://CLOUD-SERVICE-NAME";
@Autowired
private RestTemplate restTemplate;
public String create(Entity entity)
{
return restTemplate.PostForObject(SERVER_URL+"/payment/get"+id, String.class)
}
}
2.3 添加负载均衡注解
在注入RestTemplate的地方,添加@LoadBalanced注解,赋予负载均衡的能力
@Configuration
public class ApplicationContextCOnfig
{
@Bean
@LoadBalanced
public RestTemplate getRestTemplate()
{
return new RestTemplate();
}
}