今天我来介绍一下服务提供者、服务消费者,其中服务注册中心就是我们上一篇的eureka单机版和集群,流程是首先启动注册中心,服务提供者生产服务并注册到服务中心中,消费者从服务中心中获取服务并执行。
服务提供
pom.xml
<dependencies>
<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-web</artifactId>
</dependency>
</dependencies>
yml
server:
port: 1144
spring:
application:
name: service-provider
eureka:
client:
serviceUrl:
defaultZone: http://localhost:1122/eureka/
启动类
启动类中添加@EnableDiscoveryClient注解 @EnableFeignClients注解 之后我会再讲一下@EnableFeignClients注解的
@EnableDiscoveryClient :启用服务注册与发现
@EnableFeignClients:启用feign进行远程调用
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ProducerApplication {
public static void main(String[] args) {
SpringApplication.run(ProducerApplication.class, args);
}
}
实现类
@RestController
public class MyFristServiceController {
/**
* 我的第一个微服务程序
* @param name
* @return
*/
@RequestMapping(value="/helloWorld" , method= RequestMethod.GET)
public String helloWorld(String name) {
return "Hello," + name + ", this is your world!" ;
}
}
服务消费
server:
port: 1133
spring:
application:
name: service-consumer
eureka:
client:
serviceUrl:
defaultZone: http://localhost:1122/eureka/
实现类
这里面@FeignClient(name = "xxx"),xxx表示要调用的应用服务名称一定不能弄错了,然后是下面helloWorld方法,这里面要注意的问题是如果我们的被调用服务是用@PathVariable的方法获取参数,这里参数获取方法务必与被调用服务对应,如果不对应是访问不到服务的。
@FeignClient(name = "service-provider")
public interface MyFristConsumer {
/**
* 远程调用helloWorld的接口
* @param name
* @return
*/
@RequestMapping(value="/helloWorld" , method= RequestMethod.GET)
public String helloWorld(@RequestParam("name") String name) ;
}
创建一个controller类来测试我们的调用是否成功
@RestController
public class MyFristConsumerController {
@Autowired
private MyFristConsumer myFristConsumer ;
/**
* 我的第一个微服务调用程序
* @param name
* @return
*/
@RequestMapping(value="/consumerHelloWorld" , method= RequestMethod.GET)
public String helloWorld(String name) {
return myFristConsumer.helloWorld(name) ;
```