1. 程式人生 > >服務之間遠端呼叫

服務之間遠端呼叫

SpringCloud中服務之間RPC呼叫主要有RestTemplate+Ribbon和Feign客戶端呼叫

RestTemplate+Ribbon所需的依賴

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>	
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

使用RestTemplate呼叫需在啟動類加註解載入

	@LoadBalanced
	@Bean
	RestTemplate restTemplate() {
		return new RestTemplate();
	}

在業務層中呼叫方式

@Service
public class OrderService {
	@Autowired
	private RestTemplate restTemplate;
	
	public String call() {
		return this.restTemplate.getForObject("http://service-user/api/user/home", String.class);
	}
}

這裡getForObject第一個引數呼叫服務介面url地址,即 應用服務名 + 介面api相對地址,第二個引數為返回結果型別

使用Feign客戶端呼叫其他服務需引入Feign依賴:

		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>

啟動類加 @EnableFeignClients

註解 然後寫個對應的介面類

@FeignClient(value="service-user")
public interface UserFeign {

	@RequestMapping(value="/api/user/home")
	String home();
}

@FeignClient的value是在application.yml中定義的其他服務的服務名 Controller接入層中使用Feign呼叫

	@Autowired
	UserFeign userFeign;

	@RequestMapping(value="/user_home")
	@ResponseBody
	public String userHome() {
		return userFeign.home();
	}