我有一个用例,要求我们的应用程序在发生特定事件时向外部系统发送通知。通过将消息放入JMS队列来发生对外部系统的通知。
交易要求并不严格。因此,我决定使用JMS本地事务,而不是将JTA用于这样一个简单的用例,因为Spring理解如何将JMS本地事务与任何托管事务(例如数据库事务)同步以提升1PC。
我面临的问题是在发送通知之前必须使用一些数据来丰富通知。此额外信息与我负责生成事件的业务域无关。因此,我不确定在发送通知之前临时存储额外数据以回收它的位置。可能下面的插图可能有助于理解问题。
HTTP请求---> Rest API --->应用领域--->事件生成--->通知
根据上面的插图,我不想传递额外的数据并污染我的域层,这是Rest API请求有效负载的一部分,用于发送通知。
我想到的一个解决方案是在发送通知之前使用线程范围的队列通道来回收它。这样,Rest API将通过将额外数据放入队列来启动该过程,并且在发送通知之前,我将从队列中提取它以丰富通知消息。
我在这个解决方案中无法实现的部分是当我在应用程序的某个地方(事件生成和通知阶段之间)收到事件时如何从队列中提取消息。
如果我的方法没有任何意义,请在不使用索赔/检查模式的情况下建议任何解决方案。
答案 0 :(得分:0)
为什么不简单地将信息存储在标题(或标题)中?域层不需要知道它就在那里。
或者,对于您的解决方案,为每个请求创建一个新的QueueChannel
,并在标题中存储对它的引用,并在后端存储receive()
,但是更容易使用标题直接。