这是我第一次通过apache camel使用Hazelcast分布式缓存(队列)。我创建了一个路由生成器,在其中我配置了一个hazelcast-que
endpoint,如apache camel留档中所述。骆驼路由启动了,但它没有连接到hazelcast(客户端配置)实例。它总是从库启动新的hazelcast(在构建 /embedded中)。
我尝试使用hazel常量主机、端口、HazelcastInstance名称等在路由设置器中传递Hazelcast实例(客户端配置),但所有尝试都不成功。
HazelcastInstance
(客户端网络配置)RouteBuilder
示例代码
fromF("hazelcast-%sfoo?queueConsumerMode=Poll", HazelcastConstants.QUEUE_PREFIX)
.setHeader(HazelcastConstants.INSTANCE_HOST, constant("127.0.0.1"))
.setHeader(HazelcastConstants.INSTANCE_PORT, constant(5701))
.setHeader(HazelcastConstants.HAZELCAST_INSTANCE_NAME_PARAM, constant("hazelcastinstance"))
.log("::>: Camel log " + body());
骆驼开始听[10.67.113.160]: 5701而不是[127.0.0.1]:5701。
假设您有一个正在运行的Hazelcast集群,您想要实现的目标可以通过以下步骤使用Spring Boot完成:
使用maven,您将添加下一个依赖项
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-hazelcast-starter</artifactId>
</dependency>
在下面的示例中,它创建了一个名为CustHazelcastConfig
的bean,类型为HazelcastInstance
,该bean是从已添加到类路径根目录的客户端配置文件creent-client-hazelcast-config. xml
构建的。
@Component
public class HazelcastConfigProvider {
@Bean
public HazelcastInstance customHazelcastConfig() {
return HazelcastClient.newHazelcastClient(
new ClientClasspathXmlConfig("custom-client-hazelcast-config.xml")
);
}
}
在下面的示例中,我们指示camel-hazelcast
使用自定义HazelcastConfig
作为对应于我们在步骤#2中创建的特定实例的名称从注册表中检索HazelcastInstance
。
fromF(
"hazelcast-%sfoo?queueConsumerMode=Poll&hazelcastInstance=#customHazelcastConfig",
HazelcastConstants.QUEUE_PREFIX
).log("Receiving: ${body}");
默认情况下,组件camel-hazelcast
处于node
模式或集群模式。要切换客户端模式,只需将camel.组件. hazelcast-que.hazelcast-mode=client
添加到您的application.properties
此步骤是可选的,可以跳过
更多详情可查看https://camel.apache.org/components/next/hazelcast-queue-component.html