本文在如下的笔记基础上进行
Spring Cloud入门笔记(一) Eureka 服务注册中心的搭建
最终项目结构如下:
1、启动Eureka
首先我们创建一个名为cloud的空maven项目,然后在里面新建一个Module即eurekaserver项目做为cloud的子项目,并启动eurekaserver,eurekaserver的配置上一篇笔记已经有了,不懂的可以去看,这里不再列出来。
2、创建poovider
接下来继续在cloud这个maven项目中创建一个名为provider的项目,即为服务的提供者,注意添加Eureka Discovery Client和spring Web依赖:
项目创建成功后,在 application.properties 中添加如下配置 :
spring.application.name=Provider
server.port=8090
eureka.client.service-url.defaultZone=http://localhost:8080/eureka/
- spring.application.name 表示当前服务的名字,这个名字将作为服务的标记存储在 Eureka 上,当其他服务需要调用这个服务的时候,都是通过这个名字来查找服务。
- server.port 当前服务的端口。
- 最后一个地址表示当前服务需要注册到的服务注册中心地址,这里需要注意,如果服务注册中心是一个集群,这里也可以只写集群中的一个节点,Eureka 集群会自动进行服务同步。
只要当前项目的 classpath 下存在 spring-cloud-starter-netflix-eureka-client
依赖,并且提供了 eureka 注册中心的地址,该服务就会自动注册到 Eureka Server 上。即不必添加@EnableEurekaClient注解,在早期的版本中是需要的。
接下来在项目中添加一个/sayHello接口供其他服务调用代码如下:
@RestController
class TestController {
@RequestMapping("/sayHello")
public String sayHello(String name){
return "hello"+name;
}
}
3、创建Consumer
接下来继续在cloud项目中添加一个Consumer子项目,即为服务的消费责,创建Consumer的过程和创建provider一致不在赘述,但不需要添加如上一致的/sayHello只需更改下配置文件如下:
spring.application.name=Consumer
server.port=8091
eureka.client.service-url.defaultZone=http://localhost:8080/eureka/
接下来在consumer的启动类中添加一个RestTemplate 的实例,RestTemplate 是用来进行http请求的。
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
@Bean
RestTemplate restTemplate(){
return new RestTemplate();
}
}
接下来创建一个TestController类,在里面写写一个/sayHello接口,用于掉用服务提供者的/sayHello接口并放回信息。
@RestController
public class TestController {
@Autowired
DiscoveryClient discoveryClient;
@Autowired
RestTemplate restTemplate;
@RequestMapping("/sayHello")
public String sayHello(String name){
List<ServiceInstance> list = discoveryClient.getInstances("provider");
ServiceInstance instances = list.get(0);
String host = instances.getHost();
int port = instances.getPort();
String result = restTemplate.getForObject("http://"+host+":"+port+"/sayHello?name={1}",String.class,name);
return result;
}
}
启动eurekaserver,provider,cosumer之后我们在浏览器中输入http://localhost:8091/sayHello?name=张某某
访问刚才的sayHello接口去调用服务提供者的sayHello接口并返回结果。
看得出这种调用方式有点麻烦,下一章将记录,声明式服务调用feign,将更加简洁。