# 088. 快速完成缓存服务接收数据变更消息以及调用商品服务接口的代码编写

TIP

在 hystrix 章节中,服务之间本应该使用 mq 来通知缓存是否有修改等, 为了更好的讲解 hystrix,一切从简,使用 httpClient 等方式来模拟

httpClient 依赖如下

compile 'org.apache.httpcomponents:httpclient:4.4'
1

具体工具类就不贴了

本章要做的事情:通知缓存服务有商品更新,缓存服务调用商品服务完成更新

  1. 缓存服务提供一个 /change/product?productId=1 的接口

    调用该接口表示触发了商品更新信息,该接口获取调用上服务获取商品详情,完成缓存更新

  2. 商品服务提供一个 /getProduct?productId=1 的接口

    获取一个商品详情信息

开始编码

cn.mrcode.cachepdp.eshop.cache.ha.controller.CacheController

@RestController
public class CacheController {
    private Logger log = LoggerFactory.getLogger(getClass());

    @RequestMapping("/change/product")
    public String changeProduct(Long productId) {
        String url = "http://localhost:7000/getProduct?productId=" + productId;
        String response = HttpClientUtils.sendGetRequest(url);
        log.info(response);
        return "success";
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

cn.mrcode.cachepdp.eshop.product.ha.controller.ProductController

@RestController
public class ProductController {
    private Logger log = LoggerFactory.getLogger(getClass());

    @RequestMapping("/getProduct")
    public String getProduct(Long productId) {
        String productInfoJSON = "{\"id\": " + productId + ", \"name\": \"iphone7手机\", \"price\": 5599, \"pictureList\":\"a.jpg,b.jpg\", \"specification\": \"iphone7的规格\", \"service\": \"iphone7的售后服务\", \"color\": \"红色,白色,黑色\", \"size\": \"5.5\", \"shopId\": 1," +
                "\"modifyTime\":\"2019-05-13 22:00:00\"}";
        return productInfoJSON;
    }
}
1
2
3
4
5
6
7
8
9
10
11

访问地址:http://localhost:7001/change/product?productId=1

输出如下日志,即测试成功

2019-06-01 22:40:05.936  INFO 8536 --- [nio-7001-exec-1] c.m.c.e.c.ha.controller.CacheController  : {"id": 1, "name": "iphone7手机", "price": 5599, "pictureList":"a.jpg,b.jpg", "specification": "iphone7的规格", "service": "iphone7的售后服务", "color": "红色,白色,黑色", "size": "5.5", "shopId": 1,"modifyTime":"2019-05-13 22:00:00"}

1
2