程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> spring/spring boot/spring cloud開發總結,springcloud

spring/spring boot/spring cloud開發總結,springcloud

編輯:JAVA綜合教程

spring/spring boot/spring cloud開發總結,springcloud


  背景

       針對RPC遠程調用,都在使用dubbo、dubbox等,我們也是如此。由於社區暫停維護、應對未來發展,我們准備嘗試新技術(或許這時候也不算什麼新技術了吧),選擇使用了spring cloud架構。在此期間使用spring boot項目嘗試開發,結果良好。所以想重構原spring項目至spring cloud一步一步進行,因此開發中會出現各種問題。

  問題

      問題總是伴隨著開發一步一步顯露出來,遇到問題總要去解決:

      spring cloud相關問題:

        1.跨系統調用,傳參對象接收不到問題

           解決:服務方在對象參數前@RequestBody即可(ps:public void saveUser(@RequestBody User user)),數據存在報文體中。

        2.系統間重試問題,會多次調用是正常業務數據出現重復,造成垃圾數據

           解決分為2步且所有都在調用方配置,第一步新增類:

           return中是參照feign.Retryer,至於方法名字任意。

@Configuration
public class FeignConfig {
    @Bean
    public Retryer feignRetryer() {
        return new Retryer.Default(100, SECONDS.toMillis(1), 0);
    }
}

        第二步: 

       # Max number of next servers to retry (excluding the first server)

        sample-client.ribbon.MaxAutoRetriesNextServer=1對於集群服務會隨機選擇下一個服務,有可能還是選擇訪問自己。不是集群設置為1會訪問自己會造成2次訪問。

        sample-client 對於多個服務端,sample-client可以刪掉。 

           查看配置發現,針對配置部分請點擊這裡:

    # Max number of retries on the same server (excluding the first try)
    sample-client.ribbon.MaxAutoRetries=1  發現沒用     

    3.部署服務器,注冊中心服務均存在,但是無法訪問獲取數據,報服務拒絕連接

           解決:其實這算是個注意點,平時開發都是SpringApplication啟動項目,打包部署服務時tomcat端口與server.port(spring boot)配置不一致造成。猜測spring cloud訪問從注冊中心獲取主機與端口,根據主機和端口訪問服務但是服務tomcat設置端口與配置不一致,造成問題。

    spring boot相關問題:

         1.項目使用SpringApplication啟動正常,但是訪問不了頁面

            解決:@ComponentScan只掃描當前程序所在包結構(包含子包)中聲明

      | - src
      | | - main
      | | | - java
      | | | | - com
      | | | | | - controller/service/dao
      | | | | - SpringApplication.java

         2.請求url響應問題,不同後綴響應不同

              解決:該場景是因為spring boot有多個視圖解析器,ajax請求可以直接使用a/b,頁面a/b.htm

      spring相關問題:

         1.spring調用spring cloud項目問題

               解決:使用HttpClient設置請求頭Content-Type:application/json訪問spring cloud對外系統(gateway)即可,至於內網外網訪問隨意

      異常問題:

         spring cloud有Hystrix斷路由,雖然好處多多,但是訪問每個接口都要相應斷路由接口,如果處理邏輯有區別還好,沒有區別我就不說了。由於我們是統一返回,所以針對出現問題使用全局異常攔截記錄日志返回失敗,這有個缺點是訪問通異常可以處理,至於超時這些沒有訪問通就要捕獲。

 討論

      學藝不精,有些都是似懂非懂,希望大神能指點指點。其中有點疑惑,spring訪問spring  cloud最後都打成war包部署發布,個人覺得spring應該也可以注冊到注冊中心,希望知道的可以分享。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved