0%

spring cloud eureka

我默认你已经是非常熟悉注册发现模式.
我们需要三步:
1:搭建注册中心
2:服务提供者
3:服务的消费者

注册中心:

1Maven依赖:

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

2编写配置文件:

1
2
3
4
5
6
7
8
9
10
#设置服务器端口--官方默认8761
server.port=8761
#设置应用程序名称 名字不许用下划线,不支持服务调用
spring.application.name=sc-demo-server
#表示不向注册中心注册
eureka.client.register-with-eureka=false
#表示不向注册中心调用服务
eureka.client.fetch-registry=false
#服务的地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

3启动类上添加注解@EnableEurekaServer //启动eureka
查看界面输入:http://localhost:8761

服务提供者:

1Maven依赖:

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2编写配置文件:

1
2
3
4
5
6
7
8
9
10
# 应用名称
spring.application.name=pro1
# 应用服务 WEB 访问端口
server.port=8081
# 服务的地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
#表示向注册中心注册
eureka.client.register-with-eureka=true
#表示不向注册中心调用服务
eureka.client.fetch-registry=false

3启动类上添加注解@EnableEurekaClient // 开启服务注册
需要注意的是提供者,提供的服务是以Controller形式呈现而非Service, 此过程无需任何额外的代码。

服务的消费者:

1Maven依赖:

1
2
3
4
5
6
7
8
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

2编写配置文件:

1
2
3
4
5
6
7
8
9
10
# 应用名称
spring.application.name=con2
# 应用服务 WEB 访问端口
server.port=8082
# 服务的地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
#表示不向注册中心注册
eureka.client.register-with-eureka=false
#表示向注册中心调用服务
eureka.client.fetch-registry=true

3在启动类上添加注解@EnableEurekaClient
在启动类中写入以下代码:

1
2
3
4
5
6
//在启动类中创建RestTemplate对象用于调用http服务
@Bean
@LoadBalanced //支持使用服务名称发现服务进行调用,且支持负载
public RestTemplate getRestTemplate(){
return new RestTemplate();
}

4调用服务

1
2
3
4
5
6
7
@Autowired // 自动注入
private RestTemplate restTemplate;

@GetMapping("/hello")
public String hello() {
return "CON==="+restTemplate.getForObject("http://pro1/hello",String.class);
}

在调用服务时,只需要 http://提供者名字/服务名 和 对应的数据类型即可.
(当然这只是其中的一种,还有更多的实现方式)