服务提供者工程
- ##### 我们首先生成一个SpringBoot
可以从官网生成一个工程,注意,我自己的例子使用的是SpringBoot 1.5.9版本。 - ##### 我们需要添加有关SpringCloud的依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
...
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
配置服务提供者的配置文件
server: port: 10070 spring: application: name: service-provider
指定端口号为10070,服务提供者名称service-provider,这个名称很重要。
配置启动类
我是按照官网上的指导来的,如下:
@Configuration @SpringBootApplication @ComponentScan(basePackages = "自己的包") @EnableAutoConfiguration
编写对外提供的服务
这里我写了两个服务,分别是HelloController和StudyController两个类。在消费者那里,对两种服务调用方式会些差别。
HelloController@RequestMapping(value = "/") public class HelloController { @RequestMapping(value = "hello") public String hello(){ return "你好!"; } }
StudyController
@RestController @ResponseBody public class StudyController implements Study{ @Override @PostMapping("/study/") public String study(@RequestBody String name){ return "study "+name; } }
- 启动注册中心和服务提供着,可以看到我们的服务已经注册到注册中心了。
服务消费者工程
消费者与提供着一样是一个SpringBoot工程,我们只需要修改一下pom中的依赖就好。添加以下内容:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
添加配置
server: port: 10071 spring: application: name: service-customer
修改启动类,添加以下注解
@Configuration @ComponentScan(basePackages = "com.lzw.**") @EnableAutoConfiguration @EnableFeignClients
Hello服务的消费
我们在消费者工程中添加对一个接口,这个接口的名称和返回值类型与提供者中的名称和返回值必须是一致的。@FeignClient(name="service-provider") public interface Hello { @RequestMapping(method = RequestMethod.GET, value = "/hello") String hello(); }
注意@FeignClient注解中的值为服务提供着在配置文件中写明的名称。
调用服务
5-1. 调用Hello服务同样写一个controller,注入我们上面接口中的Hello方法声明。
@RestController public class CustomerController { @Autowired Hello hello; @RequestMapping("/hello") public String hello(){ return hello.hello(); } }
5-2. 调用Study服务
调用Hello服务的时候我们是在同一个工程中写的Hello接口,现在我们独立出来一个工程,专门放服务的接口声明,接口工程pom文件和消费者一样,只是我们在这个工程中只写接口。
@FeignClient(name = "service-provider")
public interface Study {
@PostMapping("/study/")
String study(@RequestBody String name);
}
因为我们把Study接口放到了一个独立的工程下,所以我们必须在服务消费者的启动类的@EnableFeignClients注解上添加扫描指定包:
@EnableFeignClients(basePackages = "com.lzw.**")
@EnableFeignClients好像只能指定一个包,所以只好和服务消费者包名写一致了。
启动服务者,我们看到也在注册中心注册了,这样就实现了消费者调用服务者的功能了。
这里还有更多配置,例如@FeignClient可以指定FeignConfig自定义配置,我们在后面再讨论。