我想配置InboundChannelAdapter,以便它应该从Redis队列中弹出消息,并将其传递给基于Java的注释中的ServiceActivator(仅,避免使用XML)。我从Spring文档中找到了代码:
@Bean("someAdapter.source")
@EndpointId("someAdapter")
@InboundChannelAdapter(channel = "channel3", poller = @Poller(fixedDelay = "5000"))
public MessageSource<?> source() {
return () -> {
...
};
}
但是我不明白的是,如何通过使用redisConnectionFactory从redis队列中弹出数据来返回MessageSource?
换句话说,如何在基于Java的注释中做到这一点?
<int-redis:queue-inbound-channel-adapter id="postPublicationInboundAdapter"
connection-factory="redisConnectionFactory"
channel="postPublicationChannel"
error-channel="postPublicationLoggingChannel"
receive-timeout="5000"
queue="archive.post.publication.queue"
serializer="postPublicationJsonRedisSerializer"/>
借助XML配置和Spring
Integration命名空间的支持,XML解析器隐藏了如何声明目标bean并将它们连接在一起。对于Java和注释配置,了解用于目标最终用户应用程序的Framework
API非常重要。
然后我们为此打开一个XSD <int-redis:queue-inbound-channel-adapter>
:
<xsd:element name="queue-inbound-channel-adapter">
<xsd:annotation>
<xsd:documentation>
Defines a Message Producing Endpoint for the
'org.springframework.integration.redis.inbound.RedisQueueMessageDrivenEndpoint' for listening a Redis
queue.
</xsd:documentation>
</xsd:annotation>
因此,听起来a int-redis:queue-inbound-channel- adapter
不是MessageSource
。因此@InboundChannelAdapter
是死胡同。我同意XML元素的名称当时是错误的,但是重命名它为时已晚。
从这里我们也已经弄清楚我们需要处理这个问题RedisQueueMessageDrivenEndpoint
。并且由于它是 消息驱动的
,自我管理的,因此我们不需要任何特殊的注释。足以将其声明为如下所示的bean:
@Bean
RedisQueueMessageDrivenEndpoint redisQueueMessageDrivenEndpoint(RedisConnectionFactory redisConnectionFactory, RedisSerializer<?> serializer) {
RedisQueueMessageDrivenEndpoint endpoint =
new RedisQueueMessageDrivenEndpoint("archive.post.publication.queue", redisConnectionFactory);
endpoint.setOutputChannelName("postPublicationChannel");
endpoint.setErrorChannelName("postPublicationLoggingChannel");
endpoint.setReceiveTimeout(5000);
endpoint.setSerializer(serializer);
return endpoint;
}
问题内容: 我是一个redis初学者。我正在学习将其用于在轨道上的红宝石。 Redis支持很多分贝(最多可以支持30个)。正常访问我运行的客户端Redis控制台 在终端。默认情况下,它会自动进入db0。如果它有多个db,则可以使用命令选择要访问的db。 但是我不知道创建一个数据库使用的任何方法。 你能帮助我吗。非常感谢。! 问题答案: 无需在Redis中创建一个数据库,只需使用它即可。您还可以通过
要在redis中使用和创建队列,在python中,我是这样做的: 但是如何在redis队列中存储key:value对呢? 假设和可以是任何字符串(因此不能使用进行拆分),推送的最佳方式是什么 4个项目进入队列,并且当第5对被推入队列时,它弹出?
问题内容: 我正在使用Redis通过Redis-py客户端库存储两个数据库:0和1 。我想为每个数据库创建两个连接。目前,我正在这样做: 但是,我似乎找不到从连接创建Redis对象的方法。 我在这里犯一个菜鸟错误吗? 问题答案: 您真的不应该那样创建连接。让我引用redis-py文档。 在后台,redis- py使用连接池来管理与Redis服务器的连接。默认情况下,您创建的每个Redis实例将依次
问题内容: 假设我在, 我想抽出时间来创作。是否有类似的东西 ? 问题答案: Redis不存储此信息。 您可以使用单独的密钥:
问题内容: 我们知道“ final”关键字在Java中的用途。在将变量声明为final时,我们必须初始化变量。例如“ final int a = 10;” 我们无法更改“ a”的值。但是,如果我们选择HashTable,甚至可以将HashTable声明为final,也可以添加一些值。 例:: 现在,我将MYHASH HashTable声明为final。如果我尝试向此添加更多元素,则它会被接受。 现
问题内容: 有没有一种方法可以使用 自动构建 器为in类创建构建器(Joshua Bloch的构建器模式 )?例如菜单中的选项,插件或其他。我在“ ” 下找不到任何内容。 问题答案: 也许我晚会晚了。 Eclipse本身没有提供生成代码以支持构建器模式的方法。但是,可以通过插件扩展它以增强功能。 我有一个使用此插件的插件: https://github.com/henningjensen/bpep