当前位置: 首页 > 知识库问答 >
问题:

在Spring Integration DSL服务激活器中丢弃消息

轩辕鸿
2023-03-14

是否有一种方法可以丢弃使用Spring Integration DSL.handle()方法定义的Spring Integration Service Activator中的消息?

更具体地说,假设下面的IntegrationFlow定义...

public IntegrationFlow sampleFlow() {
    return IntegrationFlows
             .from("someChannel")
             .handle(someServiceClass::someMethod)
             .get();
}

我发现,从SomeMethod返回null似乎可以有效地结束流,但我不确定这是否是最优雅/正确的解决方案。如果这是推荐的解决方案,那很好。

共有1个答案

曹成双
2023-03-14

没错。停止从服务方法返回null的处理实际上是非正式的模式。我们甚至以非官方的方式记录了它:https://docs.spring.io/spring-integration/docs/5.2.3.release/reference/html/messaging-endpoints.html#service-activator-namespace

服务激活器是生成应答消息不需要的组件之一。如果方法返回null或具有void返回类型,则服务激活器在方法调用后退出,没有任何信号。

您还可以通过filter()实现丢弃和日志目标。

 类似资料:
  • 我正在尝试在Azure中构建一个简单的WebAPI REST服务,后端有一个服务总线队列工作器。我可以从Web API向工作人员发送一条消息。然而,我试图发送更多的信息,只是为了看看一切是如何运作的。因此,我创建了一个简单的控制器,如下所示: 当我呼叫控制器时,我只收到工作人员接收到的大约1/2的消息。其余的似乎都被放弃了。

  • 如何配置我的以丢弃未使用的消息? 我不希望我的客户端在订阅服务器队列时收到服务器发送的所有旧消息。 这是我目前的经纪人: 目前,我的服务器首先启动并发送大约10条消息。之后,我的客户机订阅队列,并接收在没有客户机订阅时发送的所有10条消息。我不想要这种行为。 解决 然后我发出这样一条信息: 解决方案2 我创建了一个主题而不是队列。 http://Java sample approach . com

  • 我有一个Web服务,每个版本将有多个版本和多个类。我想在启动时动态创建服务激活器,这样我就可以减少配置量,从而更容易维护。开发人员可以放入一个新类,SI会自动拾取它。 我编码了一个Application Listener: 稍后在路由器中,我有以下代码: 但当路由器尝试路由时,我会出现以下错误: 我该怎么做?我需要动态创建服务激活器,并在以后将消息路由到这些激活器。 没有办法在ServiceAct

  • 我有一个队列通道和一个带有轮询器的服务激活器,轮询器从该队列中读取数据。我希望配置为“我希望50个线程轮询该队列,每次轮询并返回消息时,在此线程上调用服务激活器指向的服务。” 该服务没有异步注释,但无状态,可以以并发方式安全运行。 下面的方法能做到吗?有没有其他首选的方法来实现这一点?

  • 我在一个简单的POJO中配置了一个服务激活器,我想将其转换为Java DSL。 现在,我的Java DSL如下所示, 有一个带有服务激活器的POJO, 在XML中,相应的配置如下所示, 如何在Java DSL中调用ServiceActivator方法?我正在考虑使用,但参数应该是什么 在使用Java DSL时,是否有空通道的概念?如果是,我们如何指定

  • 带有服务工作者的网站,托管https://121eddie.github.io/并在Chrome 66.0中运行。3359.181 /索引。html在每次加载时正确跟踪以下注册 }); 第一次运行时,/serviceWorker。js执行“激活”事件,正确获取缓存名称并缓存文件 在第二次运行时,不会触发“激活”(没有日志跟踪,没有获取)。 在第三次运行中,甚至不再触发“抓取”。这意味着脱机请求不被