关于java:十八order调用item和user

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

feign,hystrix,actuator

1.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<List<Item>> getItems(@PathVariable String orderId);
    //缩小商品库存
 @PostMapping("/decreaseNumber")
    JsonResult<?> decreaseNumber(@RequestBody List<Item> items);
}
@FeignClient(name="user-service",fallback =UserClientFB.class )
public interface UserClient {
    //获取用户,依据orderId?????不对,值依据userId
 /* @GetMapping("{orderId}")
 JsonResult<User> getUser(@PathVariable String orderId); //减少用户积分,依据orderId和积分
 @PostMapping("{orderId}/score") JsonResult<?> addScore(@PathVariable String orderId,Integer score);*/ @GetMapping("/{userId}")
    JsonResult<User> getUser(@PathVariable Integer userId);
    @PostMapping("/{userId}/score")
    JsonResult<?> addScore(@PathVariable Integer userId,Integer score);
}

@Component
public class ItemClientFB implements ItemClient{
    @Override
 public JsonResult<List<Item>> getItems(String orderId) {
        //增加缓存数据
 if(Math.random()>0.5){
            ArrayList<Item> 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<Item> items) {
        return JsonResult.err("缩小商品库存失败");
    }
}

@Component
public class UserClientFB implements UserClient{
    @Override
 public JsonResult<User> 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

@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<List<Item>> items = itemClient.getItems(orderId);
        //TODO: 近程调用用户服务,获取用户数据
 //userClient.getUser(userId);获取用户时,id写死
 JsonResult<User> 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 配置启动参数,启动两台服务器

1.6启动服服,进行测试

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

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

[http://localhost:8202/

留神:商品可能能获取到,可能获取的是缓存的,也肯获取不到。显示null。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理