Spring-Cloud整合Spring-Session的注意點
今天剛學習,但原文中還沒有更新關於如何整合Spring-Session。我就想動手試一試,結果遇到了不少問題,在這裡記錄下來,做一個分享。
專案的結構很簡單,就是zuul+feign+一個微服務的結構,然後想透過spring-session共享同一個session。透過後,成功的執行了專案,但是發現zuul,feign,微服務中三處列印出來的sessionId都不相同。透過瀏覽器除錯可以確定spring-session是其作用了。
如果是tomcat的session,cookie的name應該是JSESSIONID,這裡顯示SESSION說明spring-session是其作用了,而且也可以在redis中找到對應的記錄。那麼產生三處session都不同的原因應該就是zuul轉發給feign,feign呼叫微服務的時候都沒有把cookie傳過去。找到原因後,就有解決的思路了。
透過查詢發現,zuul預設是遮蔽Cookie的,要想使用Cookie,要在application.yml中配置sensitiveHeaders並把它設為空,這是一個遮蔽的黑名單,預設不為空,會遮蔽Cookie,例子如下:
zuul: routes: feign-a: path: /feign-a/** serviceId: fegin-service-a sensitiveHeaders:
透過這個配置zuul已經可以把cookie傳到feign中了,那麼feign要如何把cookie傳到微服務中呢?我們可以透過feign的RequestInterceptor介面來實現
@Configurationpublic class FeignConfig { @Bean public RequestInterceptor requestInterceptor() { return requestTemplate -> { String sessionId = RequestContextHolder.currentRequestAttributes().getSessionId(); if (!Strings.isNullOrEmpty(sessionId)) { requestTemplate.header("Cookie", "SESSION=" + sessionId); } }; } }
本以為這樣就完事大吉了,但是還是出錯了,報了找不到與執行緒繫結的request的異常。透過除錯初步判斷應該是feign整合了hystrix的鍋。這裡整了好久還是沒解決,最後還是在找到了解決辦法。透過更改hystrix的預設策略為SEMAPHORE可以解決。
hystrix: command: default: execution: isolation: strategy: SEMAPHORE
作者:黃瓜精
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/818/viewspace-2820537/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- spring-boot 整合 spring-sessionSpringbootSession
- Insight spring-session 配置(整合方式)SpringSession
- spring-sessionSpringSession
- SpringBoot2.x 整合Spring-Session實現Session共享Spring BootSession
- Servlet的init注意點Servlet
- vector的使用注意點
- css注意點CSS
- sql中的*的使用注意點SQL
- spring-cloud 服務治理SpringCloud
- Spring-Cloud之hello worldSpringCloud
- 分享mysql注意點MySql
- reactjs 注意點ReactJS
- Golang switch case 的使用注意點Golang
- CSS中will-change的注意點CSS
- 安裝pybrain的注意點AI
- 寫小說主要注意的點
- MySQL的clone(克隆)要注意的點MySql
- struts2 + urlrewrite 整合注意事項
- LEFT JOIN 需要注意的點(Presto)REST
- ios-10 推送中注意的點iOS
- Database Link 建立注意的兩點Database
- 手機網站的幾點注意網站
- App Store 稽核注意點APP
- 封裝framework注意點封裝Framework
- PHP 抽象類繼承抽象類時的注意點PHP 抽象類繼承抽象類時的注意點PHP抽象繼承
- Spring-Cloud之Ribbon原理剖析SpringCloud
- Spring-Cloud之Feign原理剖析SpringCloud
- 關於CORS 應該注意的幾點CORS
- golang split需要注意的一個點Golang
- wordpress的save_post鉤子注意點
- 介面文件設計的12個注意點
- 說點JSON使用的注意事項JSON
- Swift中URL處理中的注意點Swift
- 10-02、協議protocol的注意點協議Protocol
- 從技術走向管理的注意要點
- 使用Array.prototype.indexOf()的幾點注意Index
- JavaScript JavaScript與XML——“XPath”的注意要點JavaScriptXML
- 新手學習Django的十條注意點Django