一、FeignClient
1.导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>4.1.0</version>
</dependency>
2.在启动类加入注解
@EnableFeignClients
public class S99UserApplication {
public static void main(String[] args) {
SpringApplication.run(S99UserApplication.class, args);
}
}
3.编写代码
- 新建一个UserController,使用RestController注解,因为要返回数据。
- 编写一个数据接口,方便调用。
- 因为要通过用户来调用订单的数据,所以在用户类里定义一个接口(interface),并且使用FeignClient注解指定要调用的服务名称。
- 在这个接口里定义一个RequestMapping,注意,这里的路径要和被调用服务的数据的路径一致。
- 在UserController里用Autowired注解装配接口。
- 调用
@RestController
public class UserController
{
@Autowired
OrderService orderService;
@RequestMapping("/getUsers")
public Map getUserInfo()
{
Map users=new HashMap();
users.put("姓名","小满");
users.put("学号","123345");
users.put("订单",orderService.getOrders());
return users;
}
}
@FeignClient("S99-Order")
public interface OrderService
{
@RequestMapping ("/ord")
Map getOrders();
}
二、RestTemplate
1.在启动类注册RestTemplate到IOC容器,并开启负载均衡
@SpringBootApplication
@EnableDiscoveryClient//开启服务发现功能
public class S99OrderApplication
{
//注册RestTemplate到ioc容器
@Bean
@LoadBalanced//开启负载均衡
RestTemplate restTemplate()
{
return new RestTemplate();
}
public static void main(String[] args)
{
SpringApplication.run(S99OrderApplication.class, args);
}
}
2.编写代码
@RestController
public class OrderController
{
//@Resource
@Autowired
RestTemplate restTemplate;
@RequestMapping("/ord")
public Map getUserInfo()
{
String produrl="http://S99-Products/prods";//!!!!!!
Map prods = restTemplate.getForObject(produrl, Map.class);
Map ords=new HashMap();
ords.put("订单编号","1");
ords.put("产品",prods);
return ords;
}
}
值得注意的是,produrl这里不能指定具体的地址,容易导致服务崩溃!!!