gpt4 book ai didi

java - 有关此用例的架构/设计的一些问题?

转载 作者:行者123 更新时间:2023-12-01 13:11:19 25 4
gpt4 key购买 nike

我的应用程序需要作为中间件工作,它从各个地方获取订单(以 xml 形式)包含供应商 ID 的客户。一旦收到订单,需要发送订单请求以xml的形式向不同的供应商提供。我对它的三个方面持双重态度。它们在这里:-

问题:

  1. 我的高层计划是一旦请求到来,就把它放入 jms 队列中。(现在我不确定我应该为每个供应商创建队列还是一个队列就足够了。我认为一个队列就足够了。因为维护大量队列会产生开销。)。为每个供应商维护单独的队列的优点是可以更快地处理消息,因为每个队列上都有单独的生产者。

  2. 将对象放入队列之前我需要做一些业务验证。另外,我接收的输入 xml 的结构和我需要发送给供应商的输出 xml 的结构是不同的。为此,我计划将输入 xml 转换为 java 对象,然后放入队列这样消费者就可以轻松地进行验证。另一个想法是不要将 xml 转换为 java 对象,只需获取所有元素通过 xpath/xstream api 获取值并验证它们并将 xml 字符串按原样放入队列中,因为。然后在消费者端将 xml 转换为 java 对象,然后转换为不同的 xml 格式。有办法做到吗?

  3. 现在我的要求是队列上的消费者每 5 小时处理一次队列上的消息并发送 xml 请求给供应商。我打算在这里使用quartz调度程序,它将一一挑选作业并发送到相应的基于supplierId的供应商。我的问题是,我的工作是否会一一挑选消息,然后将其发送给供应商。会太慢了。我计划在 quartz 作业创建 ThreadPool 的地方处理它,其大小为十个线程它同时处理来自队列的消息(所以队列上将有多个消费者。我认为这对队列无效。我需要这里的主题而不是队列吗?)。第二种方法更好还是有比这更好的方法?

我预计每小时 50k 个请求的负载,这意味着每秒大约 15 个请求

最佳答案

您的基本要求是,

  1. 以 XML 形式获取客户订单(您尚未告知如何接收)
  2. 进行基本的业务验证。
  3. 将订单发送给供应商

并且您将排除 50k 请求(您尚未提供大致的订单大小)。假设您的平均订单大小为 10K,则仅将其保存在队列中就需要大约 500 MB(无论队列数量是多少)。我不确定您正在运行哪个环境。

对于第 1 点 我会选择单个队列而不是多个队列 - 选择适当的持久存储。我假设您将使用分布式队列,以便在添加集群时可以轻松扩展它。

对于第 2 点 我将转换为 POJO (您自己的格式)并执行业务验证。因此,以后如果您想将业务验证扩展到标尺或任何其他转换,那么维护起来会很容易。 - 基本上获取任何形式的输入(XML/POJO/JSON ...)并转换为中间格式(您可以在中间fomart之上编写自定义 validator/转换实用程序)。并在输入和输出的通用格式之间保留映射。这样您就可以编写格式化程序并使用它们。当改变任何特定供应商的格式时,这不会影响 future 。尝试外部化格式映射。

对于第 3 点 在您的情况下,订单只需处理一次。所以我会选择队列。并且你可以有多个消息监听器。消息监听器以异步方式传递订单。因此,一个队列可以有多个监听器。每个监听器将运行单独的线程。收到订单后立即发送是否有问题?避免在特定时间出现重负载对您和供应商都有好处。

关于java - 有关此用例的架构/设计的一些问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22844048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com