SpringCloud中Service類注入同服務下(@Feign)api介面不走http的解決方案
阿新 • • 發佈:2019-02-09
在spring cloud專案中經常會有一個服務需要依賴另外一個服務的api包,從而使用其介面實現。在我們使用@Feign的時候,其實是用本質上採用的是http呼叫摸個服務下的其介面實現,那麼http呼叫的話,就會多產生一個執行緒,如圖測試,
2018-04-22 00:37:26.517 INFO 24548 --- [nio-9999-exec-4] c.d.c.eureka.discovery.UserServiceImpl : http-nio-9999-exec-4
2018-04-22 00:37:26.523 INFO 24548 --- [nio-9999-exec-5] c.d .c.e.discovery.MessageServiceImpl : http-nio-9999-exec-5
我們習慣是用api中的介面去注入到我們的service類中。 當在同一個服務裡面一個介面被其他service類autowird注入時候,以為是@Feign,豈不是通過http呼叫,多繞了很多彎路,自己service沒有必要這要,當然你可以注入其介面實現,如圖
@Autowired
private MessageServiceImpl messageService;
但是如果是這個樣子,就不方便以後服務拆分,所以可以採取@Resource(name=”“),以為這個是根據名稱找到spring中bean的,如這樣使用
@RestController("MessageService")
class MessageServiceImpl implements MessageService
而其他同服務下service類採用如下注入
@Resource(name = "messageService")
private MessageService messageService;
效果測試
2018-04-22 00:31:49.511 INFO 13688 --- [nio-9999-exec-5] c.d.c.eureka.discovery.UserServiceImpl : http-nio-9999-exec-5
2018-04-22 00:31:49.511 INFO 13688 --- [nio-9999-exec-5] c.d.c.e.discovery.MessageServiceImpl : http-nio-9999-exec-5