String restTemplateForObject = restTemplate.getForObject("http://服務名/url?參數" + name, String.class);
存在問題:html
說明java
仍是在上一個項目的基礎之上,在users項目中web
<!--Open Feign依賴--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
@SpringBootApplication @EnableFeignClients //開啓openfeign支持 public class Users9999Application { public static void main(String[] args) { SpringApplication.run(Users9999Application.class, args); } }
// 此時的product項目中的方法 @RestController @Slf4j public class ProductController { @Value("${server.port}") private int port; @GetMapping("/product/findAll") public Map<String, Object> findAll(){ log.info("商品服務調用成功,當前的服務端口:[{}]",port); HashMap<String, Object> map = new HashMap<>(); map.put("msg","服務調用成功,服務提供的端口爲:"+port); map.put("status",true); return map; } } //-------------------------------------------------------------------- package com.md.clients; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; /** * @author md * @Desc 調用商品服務的組件 * @date 2020/12/9 15:30 */ // 指定當前的接口是openfeign組件,value是調用的服務名 @FeignClient("products") public interface ProductClient { @GetMapping("/product/findAll") String findAll(); }
@RestController @Slf4j public class UserController { //注入客戶端對象 @Autowired private ProductClient productClient; @GetMapping("/user/findAllFeignClient") public String findAllFeignClient(){ log.info("經過使用OpenFeign組件調用商品服務..."); String msg = productClient.findAll(); return msg; } }
@GetMapping("/product/findOne") public Map<String,Object> findOne(String productId){ log.info("商品服務查詢商品信息調用成功,當前服務端口:[{}]",port); log.info("當前接收商品信息的id:[{}]",productId); Map<String, Object> map = new HashMap<String,Object>(); map.put("msg","商品服務查詢商品信息調用成功,當前服務端口: "+port); map.put("status",true); map.put("productId",productId); return map; }
// @FeignClient("products") public interface ProductClient { @GetMapping("/product/findOne") Map<String, Object> findOne(@RequestParam("productId") String productId); }
注意:使用openfeign的get方式傳遞參數,參數變量必須經過@RequestParam註解進行修飾spring
// //注入客戶端對象 @RestController @Slf4j public class UserController { @Autowired private ProductClient productClient; @GetMapping("/user/findOne") public Map<String, Object> findOne(String productId){ log.info("用來測試Openfiegn的GET方式參數傳遞"); Map<String, Object> msg = productClient.findOne(productId); log.info("調用返回信息:[{}]",msg); return msg; } }
@PostMapping("/product/save") public Map<String,Object> save(String name){ log.info("商品服務保存商品調用成功,當前服務端口:[{}]",port); log.info("當前接收商品名稱:[{}]",name); Map<String, Object> map = new HashMap<String,Object>(); map.put("msg","商品查詢服務完成當前服務端口: "+port); map.put("status",true); map.put("name",name); return map; }
//value屬性用來指定:調用服務名稱 @FeignClient("products") public interface ProductClient { @PostMapping("/product/save") String save(@RequestParam("name") String name); }
@Autowired private ProductClient productClient; @PostMapping("/user/save") public Map<String, Object> save(String productName){ log.info("接收到的商品信息名稱:[{}]",productName); Map<String, Object> map = productClient.save(productName); log.info("調用成功返回結果: "+map); return map; }
//1.商品服務定義對象 @Data public class Product { private Integer id; private String name; private Date bir; }
//2.商品服務定義接收對象的方法 @PostMapping("/product/saveProduct") public Map<String,Object> saveProduct(@RequestBody Product product){ log.info("商品服務保存商品信息調用成功,當前服務端口:[{}]",port); log.info("當前接收商品名稱:[{}]",product); Map<String, Object> map = new HashMap<String,Object>(); map.put("msg","商品服務查詢商品信息調用成功,當前服務端口: "+port); map.put("status",true); map.put("product",product); return map; }
//3.將商品對象複製到用戶服務中 // 先階段先這樣用着 //4.用戶服務中在product客戶端中聲明方法 @FeignClient("products") public interface ProductClient { @PostMapping("/product/saveProduct") String saveProduct(@RequestBody Product product); } //注意:服務提供方和調用方必定要加入@RequestBody註解
注意:服務提供方和調用方必定要加入@RequestBody註解 mvc
// 5.在用戶服務中調用保存商品信息服務 //注入客戶端對象 @Autowired private ProductClient productClient; @PostMapping("/user/saveProduct") public Map<String, Object> saveProduct(Product product){ log.info("接收到的商品信息:[{}]",product); Map<String, Object> map = productClient.saveProduct(product); log.info("調用成功返回結果: "+map); return map; }
測試app
# 這裏的PRODUCTS使用的是大寫的方法 feign.client.config.PRODUCTS.connectTimeout=5000 #配置指定服務鏈接超時 feign.client.config.PRODUCTS.readTimeout=5000 #配置指定服務等待超時 #feign.client.config.default.connectTimeout=5000 #配置全部服務鏈接超時 #feign.client.config.default.readTimeout=5000 #配置全部服務等待超時
NONE 不記錄任何日誌
BASIC 僅僅記錄請求方法,url,響應狀態代碼及執行時間HEADERS 記錄Basic級別的基礎上,記錄請求和響應的header
FULL 記錄請求和響應的header,body和元數據# 這裏的PRODUCTS使用的是大寫的方法 feign.client.config.PRODUCTS.loggerLevel=full #開啓指定服務日誌展現 #feign.client.config.default.loggerLevel=full #全局開啓服務日誌展現 logging.level.com.baizhi.feignclients=debug #指定feign調用客戶端對象所在包,必須是debug級別