spring cloud 实践(二) 服务调用

在注册中心解决了服务发现问题以后,就可以进行服务调用了。首先创建一个服务提供者。

依赖如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

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

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

编写yml写好配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
spring:
application:
name: spring-cloud-producer

server:
port: 9000
register:
port1: 8000
port2: 8001
port3: 8002

eureka:
instance:
hostname: localhost
client:
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.register.port1}/eureka/

然后在入口Application.java的class上加上注解@EnableDiscoveryClient以开启服务注册与发现。

接着就可以写我们的服务了:

1
2
3
4
5
6
7
8
@RestController
public class HelloController {

@RequestMapping("/hello")
public String index(@RequestParam String name) {
return "Hello " + name + ", Welcome to Spring Cloud.";
}
}

这样服务提供者就写好了,开启服务提供者。在Enreka控制台查看:
ProducerInstance1
可以看到服务已注册到Enreka Server。

浏览器访问地址 http://localhost:9000/hello?name=lyyljs 看见返回信息 Hello lyyljs, Welcome to Spring Cloud. 则说明服务正常。

然后编写一个服务消费者,依赖如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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-openfeign</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

Feign是一个声明web服务客户端,可以使编写web服务客户端更容易。同时,Feignribbon模块和hystrix模块分别对ribbonhystrix进行封装来实现负载均衡与熔断功能。


同样,写好配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
spring:
application:
name: spring-cloud-consumer

server:
port: 9001
register:
port1: 8000
port2: 8001
port3: 8002

eureka:
instance:
hostname: localhost
client:
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.register.port1}/eureka/

在启动class上加上注解@EnableDiscoveryClient @EnableFeignClients
按照Feign方法写好接口

1
2
3
4
5
@FeignClient(name= "spring-cloud-producer")
public interface HelloService {
@RequestMapping(value = "/hello")
public String hello(@RequestParam(value = "name") String name);
}

最后是WEB Controller

1
2
3
4
5
6
7
8
9
10
11
12
@RestController
public class ConsumerController {

@Autowired
HelloService helloService;

@RequestMapping("/hello/{name}")
public String index(@PathVariable("name") String name) {
return helloService.hello(name);
}

}

这样消费者demo也就写好了,启动起来。在注册中心可以看到
ConsumerInstance1

访问 http://localhost:9001/hello/lyyljs 看见返回 Hello lyyljs, Welcome to Spring Cloud. 信息说明消费者正常调用服务提供者的服务并返回信息。


相关链接: