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