服務提供者內容,serverId:member-server
@RestController
public class MemberController {
@Value("${server.port}")
private String serverPort;
@RequestMapping("/getMember")
public String getMember() {
return "this is member, now the server port is:" + serverPort;
}
}
【1】消費者使用rest方式調用:
啓動類:
package com.order;
@SpringBootApplication
@EnableEurekaClient
public class SpringCloudOrderApplication {
//注入到bean,並開啓負載均衡
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SpringApplication.run(SpringCloudOrderApplication.class, args);
}
}
@RestController
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/getOrder")
public String getOrder() {
String url = "http://member-server/getMember";
String result = restTemplate.getForObject(url, String.class);
return result;
}
}
【2】Feign調用方式
引入依賴:
<!-- SpringCloud整合feign客戶端依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
最好在application.yml裏面配置一下客戶端超時時間
###設置feign客戶端超時時間
ribbon:
###指的是建立連接所用的時間,適用於網絡狀況正常的情況下,兩端連接所用的時間。
ReadTimeout: 5000
###指的是建立連接後從服務器讀取到可用資源所用的時間。
ConnectTimeout: 5000
新建接口:MemberApiFeign
@FeignClient(name="member-server")
public interface MemberApiFeign {
@RequestMapping("/getMember")
public String getMember();
}
調用服務器方法:
package com.order.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import com.order.api.MemberApi;
@RestController
public class OrderController {
@Autowired
private MemberApiFeign memberApiFeign;
@RequestMapping("/getOrder")
public String getOrder() {
return memberApiFeign.getMember();
}
}
區別:
(1)Rest方式是要手動開啓負載均衡的,並且要注入到Bean纔可使用(不要用new的方式)。Feign方式是要引入依賴,默認自動就開啓了負載均衡的。
(2)Rest方式每次調用服務端方法時都要寫地址,很噁心。但是Feign方式就不一樣了。只需要設置@FeignClient就可以自動映射服務端的方法。