微服务架构设计模式聚合器模式 _ JAVA
聚合器调用多个服务实现应用程序所需的功能。它可以是一个简单的Web页面,将检索到的数据进行处理展示。它也可以是一个更高层次的组合微服务,对检索到的数据增加业务逻辑后进一步发布成一个新的微服务,这符合DRY(不做重复的事(Don’t Repeat Yourself))原则。
另外,每个服务都有自己的缓存和数据库。如果聚合器是一个组合服务,那么它也有自己的缓存和数据库。聚合器可以沿X轴和Z轴独立扩展。

下面是使用spring boot构建的一个聚合器服务
项目整体目录结构如下:
aggregator-microservices —– aggregator-service——聚合服务 —– information-microservice——产品信息服务 —– inventory-microservice——产品库存服务

nventory-microservice 库存微服务
@SpringBootApplication
public class InventoryApplication {
public static void main(String[] args) {
SpringApplication.run(InventoryApplication.class, args);
}
}
/** 库存的接口,提供产品的库存查询 */
@RestController
public class InventoryController {
@RequestMapping(value = "/inventory", method = RequestMethod.GET)
public Integer getProductTitle() {
return 5;
}
}
information-microservice 产品信息微服务
@SpringBootApplication
public class InformationApplication {
public static void main(String[] args) {
SpringApplication.run(InformationApplication.class, args);
}
}
/** 信息服务,提供产品信息 */
@RestController
public class InformationController {
@RequestMapping(value = "/information", method = RequestMethod.GET)
public String getProductTitle() {
return "产品名称";
}
}
aggregator-service 产品服务
/** 聚合器聚合各种微服务的调用,收集数据并在Rest端点下进一步发布它们 */
@RestController
public class Aggregator {
// 产品信息客户端
@Resource
private ProductInformation informationClient;
// 产品库存客户端
@Resource
private ProductInventory inventoryClient;
/** 获取产品数据 */
@RequestMapping("/product")
public Product getProduct() {
Product product = new Product();
product.setTitle(informationClient.getProductTitle());
product.setQuantity(inventoryClient.getProductQuantity());
return product;
}
}
Product实体类
@RestController
public class Product {
private String title;
private Integer quantity;
public String getTitle() { return title; }
public Integer getQuantity() { return quantity; }
public void setTitle(String title) { this.title = title; }
public void setQuantity(Integer quantity) { this.quantity = quantity; }
}
public interface ProductInformation {
String getProductTitle();
}
@Component
public class ProductInformationImpl implements ProductInformation {
private static final Logger LOGGER = LoggerFactory.getLogger(ProductInformationImpl.class);
private static final String URI = "http://localhost:50014/information";
@Override
public String getProductTitle() {
String response = null;
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpGet httpGet = new HttpGet(URI);
CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
response = EntityUtils.toString(httpResponse.getEntity());
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
}
public interface ProductInventory {
Integer getProductQuantity();
}
@Component
public class ProductInventoryImpl implements ProductInventory {
private static final Logger LOGGER = LoggerFactory.getLogger(ProductInformationImpl.class);
private static final String URI = "http://localhost:50024/inventory";
@Override
public Integer getProductQuantity() {
Integer response = null;
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpGet httpGet = new HttpGet(URI);
CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
response = Integer.parseInt(EntityUtils.toString(httpResponse.getEntity()));
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
}
@SpringBootApplication
public class App {
/** 程序入口点
* @param args 命令行参数
*/
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
用户对聚合器进行单个调用,然后聚合器调用每个相关的微服务并收集数据,将业务逻辑应用到它们,然后将完整数据作为Rest端点发布。
除了聚合模式外,还有许多微服务相关的设计模式例如 代理微服务设计模式:根据业务需求调用不同的微服务; 链式微服务设计模式:在这种情况下,每个微服务都依赖于、链接到一系列其他微服务
推荐阅读
-
Java实战之医院管理系统的实现
-
elasticsearch索引index之Translog数据功能分析
-
java实现简单发送邮件功能
-
Java实现图片比率缩放
-
Java中的JetCache 实战
-
elasticsearch索引index之engine读写控制结构实现
-
elasticsearch索引index之Mapping实现关系结构示例
-
LeetCode 动态规划之矩阵区域和详情
-
elasticsearch索引的创建过程index create逻辑分析
目录索引的创建过程materOperation方法实现clusterservice处理建立索引修改配置总结索引的创建过程从本篇...
-
java实现上传图片尺寸修改和质量压缩
本文实例为大家分享了java实现上传图片尺寸修改和质量压缩的具体代码,供大家参考,具体内容如下packagecom.zity....