十八、order调用item和user

1.在order的pom中加三个依赖

feign,hystrix,actuator

1.1编辑配置类

十八、order调用item和user_第1张图片

#启用feign
feign:
  hystrix:
    enabled: true
#暴露监控端点
management:
  endpoints:
    web:
      exposure:
        include: hystrix.stream

1.2启动类加注解:@EnableFeignClients、@EnableCircuitBreaker

1.3为item和user添加声明式客户端接口和实现类

cn.tedu.sp04.feign.ItemClient
cn.tedu.sp04.feign.UserClient
@FeignClient(name="item-service",fallback = ItemClientFB.class)
public interface ItemClient {
    //根据orderId获取商品
 @GetMapping("/{orderId}" )
    JsonResult> getItems(@PathVariable String orderId);
    //减少商品库存
 @PostMapping("/decreaseNumber")
    JsonResult decreaseNumber(@RequestBody List items);
}
@FeignClient(name="user-service",fallback =UserClientFB.class )
public interface UserClient {
    //获取用户,根据orderId?????不对,值根据userId
 /* @GetMapping("{orderId}")
 JsonResult getUser(@PathVariable String orderId); //增加用户积分,根据orderId和积分
 @PostMapping("{orderId}/score") JsonResult addScore(@PathVariable String orderId,Integer score);*/ @GetMapping("/{userId}")
    JsonResult getUser(@PathVariable Integer userId);
    @PostMapping("/{userId}/score")
    JsonResult addScore(@PathVariable Integer userId,Integer score);
}

十八、order调用item和user_第2张图片

@Component
public class ItemClientFB implements ItemClient{
    @Override
 public JsonResult> getItems(String orderId) {
        //添加缓存数据
 if(Math.random()>0.5){
            ArrayList list = new ArrayList<>();
            list.add(new Item(1,"缓存商品1",1));
            list.add(new Item(2,"缓存商品2",2));
            list.add(new Item(3,"缓存商品3",3));
        return JsonResult.ok().data(list);
        }
        return JsonResult.err("获取商品失败");
    }
    @Override
 public JsonResult decreaseNumber(List items) {
        return JsonResult.err("减少商品库存失败");
    }
}

十八、order调用item和user_第3张图片

@Component
public class UserClientFB implements UserClient{
    @Override
 public JsonResult getUser(Integer userId) {
        //缓存数据
 if(Math.random()>0.5){
            User user = new User(1,"缓存用户","缓存密码");
            return JsonResult.ok().data(user);
        }
        return JsonResult.err("获取用户失败");
    }
    @Override
 public JsonResult addScore(Integer userId, Integer score) {
        return JsonResult.err("增加用户积分失败");
    }
}

1.4 编辑OrderServiceImpl

十八、order调用item和user_第4张图片

@Service
@Slf4j
public class OrderServiceImpl implements OrderService {
    @Autowired
 private ItemClient itemClient;
    @Autowired
 private UserClient userClient;
    @Override
 public Order getOrder(String orderId) {
        log.info("获取订单: orderId="+orderId);
        //TODO: 远程调用商品服务,获取商品列表
 JsonResult> items = itemClient.getItems(orderId);
        //TODO: 远程调用用户服务,获取用户数据
 //userClient.getUser(userId);获取用户时,id写死
 JsonResult user = userClient.getUser(99);
        // 写死订单数据
 Order order = new Order();
        order.setId(orderId);
        order.setUser(user.getData());
        order.setItems(items.getData());
        return order;
    }
    @Override
 public void saveOrder(Order order) {
        log.info("保存订单: "+order);
        //TODO: 远程调用商品服务,减少商品库存
 itemClient.decreaseNumber(order.getItems());
        //TODO: 远程调用用户服务,增加用户积分
 userClient.addScore(order.getUser().getId(),100);
    }
}

1.5order-service 配置启动参数,启动两台服务器

十八、order调用item和user_第5张图片

1.6启动服服,进行测试

*   根据orderid,获取订单
http://localhost:8201/123abc
http://localhost:8202/123abc

*   保存订单
http://localhost:8201/

[http://localhost:8202/
十八、order调用item和user_第6张图片
注意:商品可能能获取到,可能获取的是缓存的,也肯获取不到。显示null。

你可能感兴趣的:(java)