准备:所需工程:msa-weather-data-eureka(被调用服务),micro-weather-eureka-client-zuul-gateway(API网关),msa-weather-report-eureka-feign-gateway(调用服务),micro-weather-eureka-server(服务注册中心)
API网关:将zuul反向代理工程改写而来,配置文件:
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: micro-weather-eureka-client-zuul-gateway
zuul:
routes:
city:
path: /city/**
serviceId: micro-weather-city-eureka //被调用的服务
data:
path: /data/**
serviceId: micro-weather-data-eureka //被调用的服务(例子中没写这个服务)
server:
port: 8086
调用服务:
package com.waylau.spring.cloud.weather.service;
import com.waylau.spring.cloud.weather.vo.City;
import com.waylau.spring.cloud.weather.vo.WeatherResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import java.util.List;
@FeignClient("micro-weather-eureka-client-zuul-gateway")
public interface DataClient {
//获取城市列表
@GetMapping("/city/cities")
List<City> listCity();
//根据城市ID查询天气
@GetMapping("/data/weather/cityId/{cityId}")
WeatherResponse getDataByCityId(@PathVariable("cityId") String cityId);
}
controller中再调用接口即可。
启动四个工程:
访问调用服务:
报错是因为被调用服务中没有数据,只是业务上的事情。实际是成功了的。
过程大概是这样: