(资料图)
接下来,我【wǒ】们【men】将创建【jiàn】一个名为“GetDataCollapserExecutor”的类【lèi】,该类用于执行【háng】Hystrix请求【qiú】合并器:
@Servicepublic class GetDataCollapserExecutor { private final ExternalService externalService; @Autowired public GetDataCollapserExecutor(ExternalService externalService) { this.externalService = externalService; } @HystrixCollapser(batchMethod = "execute", collapserProperties = { @HystrixProperty(name = "timerDelayInMilliseconds", value = "100") }) public Future
如上所【suǒ】述,我们的GetDataCollapserExecutor类包【bāo】含【hán】以下内容:
构【gòu】造函数:该【gāi】函数用于【yú】注入ExternalService实例。getData()方法【fǎ】:该方【fāng】法使【shǐ】用@HystrixCollapser注解进行注释,该【gāi】注解指定【dìng】了一个名为“execute”的批量执行方法【fǎ】。在此示例中,我们【men】将timerDelayInMilliseconds属性设置为100毫秒,这意味着【zhe】如果100毫秒【miǎo】内有多个【gè】请求,则它们将被合并为【wéi】单个请求。execute()方法:该方法使用【yòng】@HystrixCommand注解【jiě】进行【háng】注释,该注【zhù】解指【zhǐ】定了Hystrix请求【qiú】合并【bìng】器【qì】执行【háng】逻【luó】辑。在此示例中,我们遍历请求参数列【liè】表,并【bìng】为每个【gè】请求创建一个GetDataCollapser实例。最后,我们将所有【yǒu】结果合并【bìng】到一个HashMap中,并将其返回。现在,我们可以测【cè】试Hystrix请【qǐng】求合【hé】并器是否按预期工作。我们将创建【jiàn】一个名为【wéi】“DataController”的类,并将其用【yòng】于向客户端公开API:
@RestControllerpublic class DataController { private final GetDataCollapserExecutor getDataCollapserExecutor; @Autowired public DataController(GetDataCollapserExecutor getDataCollapserExecutor) { this.getDataCollapserExecutor = getDataCollapserExecutor; } @GetMapping("/data") public Map getData(@RequestParam List keys) throws ExecutionException, InterruptedException { List>> futures = new ArrayList>(); for (String key : keys) { futures.add(getDataCollapserExecutor.getData(key)); } Map resultMap = new HashMap>(); for (Future
如上所述,我们的DataController类包含以下内容:
构【gòu】造函数:该函数用【yòng】于注【zhù】入GetDataCollapserExecutor实例。getData()方【fāng】法:该方法使用【yòng】@GetMapping注解进【jìn】行注释,该注解指【zhǐ】定了API的URL路径和请【qǐng】求方法。在此【cǐ】示【shì】例中,我们【men】使用@RequestParam注解将请求参数列表注入方法参数,并【bìng】使用Future和【hé】get()方法来【lái】获【huò】取Hystrix请求【qiú】合并器的返回值。现【xiàn】在,我们可以使用Postman或类似的工具【jù】向API发送【sòng】HTTP请求,并检查【chá】是否成功合【hé】并了多个请【qǐng】求【qiú】。例如,我【wǒ】们可以向http://localhost:8080/data发送具有以下查询参数的GET请求:
?keys=key1&keys=key2&keys=key3
这【zhè】将使【shǐ】用Hystrix请求合并器执行三个请求,并【bìng】将其结果合并到单个响应【yīng】中【zhōng】。
现在,我【wǒ】们【men】可以启动应用【yòng】程序并测试【shì】它【tā】是否按预期工作【zuò】。我们可以通过运行以下命【mìng】令来启动【dòng】应用【yòng】程序:
mvn spring-boot:run
应用程序启动后,我们可以使用Postman或【huò】类【lèi】似的工【gōng】具向API发送HTTP请求【qiú】,并检查是否已成功使【shǐ】用Hystrix请求合并【bìng】器【qì】合并了多个请求。例如【rú】,我【wǒ】们可以向http://localhost:8080/data发送具有以下查询参数的GET请求:
?keys=key1&keys=key2&keys=key3
如果一切正常,我们将看到以下响应:
{ "key1": "Data for key1", "key2": "Data for key2", "key3": "Data for key3"}
这表明Hystrix请求合并器已【yǐ】成【chéng】功执【zhí】行三个【gè】请求并将其结果合并到单个【gè】响【xiǎng】应中。