- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们有一个使用 Spring Integration 的 Java 编写的应用程序。应用程序向 3d 方服务发送请求,每个请求都表示为字节数组并通过纯 TCP 发送。与 3d 方的连接存储在池中(使用 CachingClientConnectionFactory)。
我们可以向 3d 方发送几种类型的请求,现在需要为每种类型的请求设置不同的超时值。但是,就目前而言,这看起来有问题,因为为 Gateway 和 ConnectionFactory 组件设置了连接超时设置,并且无法为特定的单个请求设置连接超时。
我们希望避免仅仅为了支持不同的连接超时而引入多个网关和连接工厂。
channel 和网关配置
<int:channel id="myInput" />
<int:gateway id="myGateway"
service-interface="com.mypackage.TcpGateway"
default-request-channel="myInput"/>
<int-ip:tcp-outbound-gateway id="myOutGateway"
request-channel="mybInput"
reply-channel="clientBytesChannel"
connection-factory="myConnectionFactory"
request-timeout="${conn.timeout}"
remote-timeout="${conn.timeout}"/>
TcpGateway.java
package com.mypackage.TcpGateway;
public interface TcpGateway {
byte[] send(byte[] message);
}
RequestProcessor.java
public class RequestProcessors {
@Autowired
private TcpGateway myGateway;
public MyResponse process(MyRequest requestMessage) {
byte[] binaryMessage = transformRequest(requestMessage);
byte[] response = myGateway.send(binaryMessage);
return transformResponse(response);
}
// rest of business logic here
}
查看上面的源代码,似乎最简单的方法是扩展原生组件 TcpOutboundGateway 并替换属性 remoteTimeout
使用将超时设置保存为 ThreadLocal
的单例 bean多变的。然后可以根据 RequestProcessors.process()
中的请求类型设置必要的值。请求传递给 myGateway.send()
之前的方法.
但是,我无法找到一种优雅的方式来使用我的自定义类重新定义 TcpOutboundGateway 组件。分析了Spring Integration的源码,似乎TcpOutboundGateway对输入请求一无所知,而是注册在一个消息处理器链中,需要时调用。所以,现在这看起来不像是一个简单的解决方案。
如果您对如何更改标签 <int-ip:tcp-outbound-gateway>
使用的类有任何想法,或者如果您对如何以完全不同的方式解决主要超时问题有任何想法,请提出建议。
谢谢。
最佳答案
有趣的问题。
您是正确的(当前)AsyncReply
对象不知道原始出站消息。
我们可以做的一件事是添加一个 remote-timeout-expression
并根据消息计算超时...
AsyncReply reply = new AsyncReply(calculateReplyTimeout(requestMessage));
随意开一个JIRA Improvement Issue .
同时,如果您想自定义网关,您可以轻松实现。
虽然命名空间 ( <int-ip:...
) 不支持自定义类,但您始终可以使用 <bean/>
连接网关
你需要一个ConsumerEndpointFactoryBean
并在其 handler
中获取您的自定义网关属性(property)。
关于java - Spring 集成 : individual timeouts settings for connections in the same pool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28744212/
我正在使用 boost.pool,但我不知道何时使用 boost::pool<>::malloc和 boost::pool<>::ordered_malloc ? 所以, boost::pool<>:
我目前正在尝试从 anaconda 中的 spy 控制台运行并行代码。我相信问题可能出在我的计算机不允许 anaconda 控制 CPU 核心上,但我不知道如何解决这个问题。 另一个有趣的点是,当我运
在了解 Python 的 multiprocessing 包(对于 Python 3.4 )时,我注意到 multiprocessing.Pool 是在类 BaseContext 中定义的 上下文.p
我有这样的程序: from multiprocessing import Pool import time def f(x): # I make a heavy code here to take t
我有一个模块 A,它通过获取数据并将其发送到模块 B、C、D 等进行分析,然后将它们的结果结合在一起来执行基本的 map/reduce。 但是模块 B、C、D 等似乎不能自己创建多处理池,否则我得到
所以我有一个脚本可以连接到大约 700 个设备并执行一系列命令,然后退出。我开始使用 Multiprocessing.Pool 和 Pool.map 来减少脚本的运行时间,并允许我同时登录多个设备。
在下面的链接中有对 Pool 类的 map 方法的解释。 它似乎阻塞直到结果准备好。这意味着不需要执行 pool.close(); pool.join() 在运行 pool.map 之后,但是它在 t
context 是 class multiprocessing.pool.Pool 构造函数中的可选参数。 Documentation只说: context can be used to specif
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: What's the difference between sending -release or -dra
不确定这是否是正确的论坛。 libvirt 页面链接在这里。如果这需要张贴在不同的地方请告诉我。 virsh pool-define-as 和 create-as 有什么区别?阅读 virsh 的手册
谁能告诉我Spring Cloud Feign Client是否提供或支持Http连接池,如果可以,那么如何配置诸如池大小的设置?我似乎在官方文档中找不到此内容。谢谢你。 最佳答案 通过调查,我将尝试
我在尝试运行 Flask 应用程序时遇到了一些困难。我收到以下导入错误: File "/db/mysql_utils.py", line 2, in import mysql.conne
我有一个 Node 项目,在其中使用 pg-pool 库。我已在我的依赖项中包含以下内容: "@types/pg-pool": "0.0.3", "pg": "^7.3.0", "pg-format"
在 python 2 中,multiprocessing.dummy.Pool 和 multiprocessing.pool.ThreadPool 之间有什么区别吗?源代码似乎暗示它们是相同的。 最佳
这个问题在这里已经有了答案: Concurrent.futures vs Multiprocessing in Python 3 (6 个答案) 关闭 5 年前。 请给我解释一下这两个类有什么区别?
multiprocessing 的文档states以下关于Pool.join() : Wait for the worker processes to exit. One must call clos
我找到了一些资源,但我不确定我是否理解。 我找到的一些资源是: http://help.sap.com/saphelp_nw70/helpdata/en/fc/eb2ff3358411d1829f00
我的 Javafx 应用程序抛出许多非法状态异常,我尚未能够在源中跟踪触发器。 任何人都可以指导我导致此问题的原因以及我应该在哪里查找原因。我很难在这里展示一些代码,因为我不知道是什么原因造成的。 任
参见下面的示例和执行结果: #!/usr/bin/env python3.4 from multiprocessing import Pool import time import os def in
我目前有一个连接到我的主数据库的开放池,它运行良好。但是现在,我想为另一个数据库打开一个新池。我完全按照设置第一个池的方式设置了新池,显然我编辑了数据库名称等。加载 setupHikari() 方法时
我是一名优秀的程序员,十分优秀!