1.開啟通信日志-打印日志
1.1 日志級別
1.2 application.yml
eureka:
client:
service-url:
defaultZone:
http://localhost:8761/eureka
spring:
application:
name: member-service
#定義某一個微服務 客戶端負載均衡方式
book-service:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
#定義本系統logback最低的打印級別
logging:
level:
ROOT: INFO
#調用微服務時打印的日志級別 以下表示在client包下調用的都是debug 級別
com.itlaoqi.springcloud.memberserviceopenfeign.client.*: debug
feign:
client:
config:
# 默認
default:
loggerLevel: HEADERS
connectTimeout: 15000 #客戶端向微服務發起連接的最長等待時間
readTimeout: 15000 #連接后,等待響應返回的最長時間
# 具體到某個微服務的級別
book-service:
loggerLevel: BASIC
connectTimeout: 5000
readTimeout: 5000
debug: true
2. 通信方式變更(okhttp/httpclient)
2.1 pom.xml 引入包
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
2.2 application.yml 啟用
# 只能啟用一個
feign:
okhttp:
enabled: false
httpclient:
enabled: true
client:
config:
# 默認
default:
loggerLevel: HEADERS
connectTimeout: 15000 #客戶端向微服務發起連接的最長等待時間
readTimeout: 15000 #連接后,等待響應返回的最長時間
# 具體到某個微服務的級別
book-service:
loggerLevel: BASIC
connectTimeout: 5000
readTimeout: 5000
3. openFeign GET /POST請求
3.1 服務提供者(圖書服務)
package com.itlaoqi.springcloud.bookservice.controller;
import com.itlaoqi.springcloud.bookservice.entity.Book;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
@RestController
public class BookController {
@PostMapping("/create")
public String createBook(@RequestBody Book book){
return book.getName() + "創建成功";
}
@GetMapping("/search")
public List<Book> search(Book book){
List list = new ArrayList();
if(book.getSn().equals("1111") && book.getName().equals("x")){
list.add(new Book("1111", "XXXX", ""));
}
return list;
}
}
3.2 消費者(會員服務)
MemberController.java
@Controller
public class MemberController {
@Resource
BookService bookService;
@GetMapping("/createBook")
@ResponseBody
public String compensate(){
Book book = new Book();
book.setName("賠償圖書");
book.setSn("5555");
String result = bookService.createBook(book);
return result;
}
@GetMapping("/search")
@ResponseBody
public List<Book> search(){
//通過map 進行信息傳遞
Map param = new HashMap();
param.put("sn", "1111");
param.put("name", "x");
List<Book> list = bookService.search(param);
return list;
}
}
client.BookService.java
注意:GET 需要RequestParam 注解,並且需要傳遞Map
POST 需要加 RequestBody 注解
package com.itlaoqi.springcloud.memberserviceopenfeign.client;
import com.itlaoqi.springcloud.memberserviceopenfeign.entity.Book;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map;
@FeignClient(name="book-service")
public interface BookService {
@PostMapping("/create")
public String createBook(@RequestBody Book book);
// 注意為map 進行get 傳遞
@GetMapping("/search")
public List<Book> search(@RequestParam Map book);
}