Spring Cloud入门笔记(二) 服务注册与消费

本文在如下的笔记基础上进行

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,将更加简洁。

发布了22 篇原创文章 · 获赞 140 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/zzqaaasss/article/details/104317698