上篇文章中測試的時候我使用的postman來測試接口,現在我們要創建一個真正使用接口的服務.
創建項目
- 首先在使用工具創建一個springboot項目 在pom中添加如下配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--必須的 否則在註冊中心找不到要使用的服務-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
這裏我們使用feign來訪問我們想要的服務.
項目配置文件中我們啓用feign的熔斷功能,在application.yml中添加如下內容:
feign:
hystrix:
enabled: true
在項目啓動類上添加註解,開啓feign
@EnableFeignClients
使用feign調用其他服務
創建完成項目之後,我們看怎麼來使用前面創建的pay-server服務中的內容
在前面創建的pay-server服務中創建了一個測試的可訪問的方法:
@RestController
@RequestMapping("pay")
public class TestController {
@RequestMapping("test")
public JSONObject test(){
JSONObject jsonObject = new JSONObject();
jsonObject.put("test", "value1");
return jsonObject;
}
}
我們現在通過剛出案件的website服務來調用此方法.
首先我們創建一個feign的調用接口創建如下,註解FeignClient來聲明此接口是feign接口,裏面的value參數代表着我們前面的pay-server服務註冊到eureka中的服務名稱.當然FeignClient也能通過地址來訪問服務,但是我們有eureka註冊中心了,通過服務名來訪問服務可以實現負載均衡的能力,feign中存在着此能力.所以我們儘量使用此方式來進行服務間的訪問.接口中的抽象方法上的註解,代表着我們要訪問的服務中某個地址.也就是我們上面服務中的地址.
@FeignClient(value = "PAY-SERVER")
public interface TestServiceFeign {
@PostMapping(value = "/pay/test", consumes = "application/json")
JSONObject test();
}
現在創建controller如下:controller中注入此接口,然後調用接口中方法,進行測試.
@Controller
public class TestController {
@Resource
private TestServiceFeign service;
@RequestMapping("")
@ResponseBody
public JSONObject index(){
return service.test();
}
}