1. 程式人生 > >SpringCloud中Service類注入同服務下(@Feign)api介面不走http的解決方案

SpringCloud中Service類注入同服務下(@Feign)api介面不走http的解決方案

在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