<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                > 這個文檔的目的是實現單體接口和微服務接口的自動切換機制。因為JeecgBoot官方默認兼容單體和微服務自由切換,所以增加了這個機制,如果你完全是微服務開發不考慮自由切換,可以忽略此文章直接看 [#實戰微服務模塊結構2.4](http://doc.jeecg.com/2159148) 微服務中往往有這么一個場景,A服務需要調用B服務里面的方法,那么我們可以使用openfeign,在A服務中定義接口,聲明方法遠程調用B服務內暴露出來的地址(一般指向controller中定義的方法),那么當出現C,D,E.....更多服務的時候,并且這些服務都有可能調用B服務,如果讓其他服務每次都在自己代碼里重新聲明一遍調用B服務的接口,顯然是不合理的,所以需要將這些接口抽離出來,獨立成一個接口模塊。如項目中已經實現了的system服務的接口 ![](https://img.kancloud.cn/44/f7/44f73f4bee6e77783c7bf8bce027e6a7_329x142.png) 注意: - 接口項目的命名一致使用-api結尾 - cloud-api 表示這是給cloud項目使用的 - local-api 表示單體下使用 - 聲明兩個服務接口 可以支持單體和微服務間的切換 實際根據自己需求決定使用哪個 ## 實現: 1.在loca-api中定義接口(本項目中繼承了CommonAPI,實際自定義新的接口如果不需要使用CommonAPI中的方法其實沒必要): ~~~ //單體 public interface ISysBaseAPI extends CommonAPI { LoginUser getUserById(String id); } ~~~ 2.在具體模塊定義實現類 此處對應的system模塊 實現步驟1接口對應的所有方法 ``` @Slf4j @Service public class SysBaseApiImpl implements ISysBaseAPI { @Override public LoginUser getUserById(String id) { if(oConvertUtils.isEmpty(id)) { return null; } LoginUser loginUser = new LoginUser(); SysUser sysUser = userMapper.selectById(id); if(sysUser==null) { return null; } BeanUtils.copyProperties(sysUser, loginUser); return loginUser; } } ``` 3.在cloud-api中定義接口,FeignClient注解value是調用的服務名,方法注解GetMapping指向system中定義的請求接口 ``` //微服務 @Component @FeignClient(contextId = "sysBaseRemoteApi", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = SysBaseAPIFallbackFactory.class) public interface ISysBaseAPI extends CommonAPI { @GetMapping("/sys/api/getUserById") LoginUser getUserById(@RequestParam("id") String id); } ``` 4.在具體模塊定義controller,此處對應的system模塊,用于微服務接口的調用 ``` @RestController @RequestMapping("/sys/api") public class SystemAPIController { @Autowired private ISysBaseAPI sysBaseAPI; @GetMapping("/getUserById") LoginUser getUserById(@RequestParam("id") String id){ return sysBaseAPI.getUserById(id); } } ``` **注意**: - 這個controller 中注入的接口 即步驟1里面聲明的單體接口。 - 方法請求地址 和步驟3里面微服務接口方法的GetMapping保持一致。 #### *至此 無論單體還是微服務都能調用system下的api了* ----- ## 使用: 單體下在pom內添加依賴: ~~~ <dependency> <groupId>org.jeecgframework.boot</groupId> <artifactId>jeecg-system-local-api</artifactId> </dependency> ~~~ 微服務在pom內添加依賴 ~~~ <dependency> <groupId>org.jeecgframework.boot</groupId> <artifactId>jeecg-system-cloud-api</artifactId> </dependency> ~~~ ## 總結: 上述說明的是system模塊api的實現以及使用,如果有自己的新模塊需要寫api,參照其規則即可。 1.新增兩個api項目 2.命名以local-api/cloud-api結尾 3.分別在兩個項目中定義接口 4.在自己模塊定義實現類 實現local-api中的接口 5.在自己模塊定義controller,注入local-api中的接口,方法請求地址和cloud-api保持一致 6.其他模塊調用只需要根據單體或微服務的需要切換具體的依賴即可。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看