创建服务注册中心(端口:8000)并启动
创建被调用的服务A(端口8010,服务名:service-hi)并编写controller/action将相关方法暴露出来 如下:
package com.ldcn.cloudsd.controllers;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class BizController {
@Value("${server.port}")
String port;
@RequestMapping("/hi")
public String home() {
return "hi,i am from port:" +port;
}
}
服务A的一个访问controller/action地址为:localhost:8010/hi 返回一个字符串 准备被调用
创建被调用服务B(端口8011,服务名:service-hi)并编写controller/action同上
服务B的一个访问controller/action地址为:localhost:8011/hi 返回一个字符串 准备被调用
启动服务A和服务B,此时springcloud注册中心可以看service-hi服务8010和8011的2个实例
创建另一个服务ribbon(端口:8013)注册到注册中心,准备调用服务A或B的hi返回的字符串:
服务ribbon编写一个接口 如下:
package com.ldcn.cloudsd.callservice;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
@Component
@FeignClient(value="SERVICE-HI")
public interface CallClientService {
@RequestMapping(value="/hi")
public String getClientString();
}
@FeignClient(value="SERVICE-HI") value为调用的服务名 即application.properties/yml配置里spring.application.name=xxx的配置
接口方法上面@RequestMapping(value="/hi")为service-hi服务的controller/action访问地址
服务ribbon编写controller/action调用刚刚编写的接口 :
package com.ldcn.cloudsd.controllers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ldcn.cloudsd.callservice.CallClientService;
@RestController
public class BizController {
@Autowired
CallClientService callClientService;
@RequestMapping("/call")
public String home() {
return callClientService.getClientString();
}
}
启动服务ribbon,并访问服务ribbon的地址localhost:8013/call并不断刷新,浏览器依次出现如下结果:
调用8010:
调用8011:
注意:
服务ribbon启动类需要添加如下注解
@EnableFeignClients
同时需引入以下jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>