提问者:小点点

阿帕奇骆驼Hazelcast队列轮询


这是我第一次通过apache camel使用Hazelcast分布式缓存(队列)。我创建了一个路由生成器,在其中我配置了一个hazelcast-queendpoint,如apache camel留档中所述。骆驼路由启动了,但它没有连接到hazelcast(客户端配置)实例。它总是从库启动新的hazelcast(在构建 /embedded中)。

我尝试使用hazel常量主机、端口、HazelcastInstance名称等在路由设置器中传递Hazelcast实例(客户端配置),但所有尝试都不成功。

  • 第1步:我为HazelcastInstance(客户端网络配置)
  • 创建了Spring bean
  • 第2步:为Hazelcast添加所有apache-camel依赖项
  • 第3步:创建RouteBuilder
  • 第4步:覆盖配置方法并实现以下行

示例代码

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。


共1个答案

匿名用户

假设您有一个正在运行的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