【问题标题】:What is required to configure Hazelcast java client to work with a User Defined Service?配置 Hazelcast java 客户端以使用用户定义的服务需要什么?
【发布时间】:2018-07-06 21:44:44
【问题描述】:

我在 Hazelcast 文档的第 24 章之后创建了一个用户定义的服务,但他们从未提及使客户端能够使用 Hazelcast 客户端实例的 getDistributedObject 方法访问分布式对象所必需的。我的 xml 配置只是添加了序列化的默认(非常空白)xml。这是我的服务使用 hazelcast 节点配置的配置:

<services enable-defaults="true">
    <service enabled="true">
        <name>MapManagerService</name>
        <class-name>com.ctl.hzl.service.MapManagerService</class-name>
    </service>
</services>

我正在使用 Hazelcast-client-3.10.1 和 Java 1.8。除了 xsi 文档之外,我找不到任何格式指南,该文档很有用,但并没有真正向我展示支持我的服务需要包含的内容。我在一次尝试中收到一条错误消息,其中提到了某种服务工厂,我认为这一定是我需要的,但我一直无法找出需要什么。这是架构位置,如果有帮助的话。提前致谢。

xsi:schemaLocation="http://www.hazelcast.com/schema/client-config
              http://www.hazelcast.com/schema/config/hazelcast-client-config-3.10.xsd">

【问题讨论】:

  • 您是否让您的服务实现了 com.hazelcast.spi.RemoteService,因为这对于让客户可以访问服务至关重要?查看文档:docs.hazelcast.org/docs/3.10.2/manual/html-single/…
  • 是的,该服务以文档中描述的方式及其 CounterService 示例实现了 ManagedService 和 RemoteService。它可以跨实例正常工作,但不能跨客户端工作。我认为我的问题是我没有为我的客户定义一个工厂类型来使用我的服务,我目前正在寻找一种方法。如果我没有在客户端 xml 中定义我的服务就运行,我会收到此错误:“没有为服务注册工厂:MapManagerService”
  • 我相信我的问题是这个的部分重复:stackoverflow.com/questions/30839563/…,但他们没有显示如何定义客户端服务方法请求,也没有显示如何通过 xml 配置服务,这是我需要做的两件事。

标签: java xml hazelcast


【解决方案1】:

TLDR; 目前无法从客户端授予对用户定义类的访问权限。这个领域需要更多的工作来使这个过程对用户友好。

这是在这里回答的补充: How to write client proxy for SPI and what the difference between client and server proxies?

如何通过xml配置服务:

<hazelcast-client>
<proxy-factories>
        <proxy-factory class-name="com.hazelcast.examples.ProxyXYZ1" service="sampleService1"/>
        <proxy-factory class-name="com.hazelcast.examples.ProxyXYZ2" service="sampleService1"/>
        <proxy-factory class-name="com.hazelcast.examples.ProxyXYZ3" service="sampleService3"/>
    </proxy-factories>
</hazelcast-client>

请求和响应(称为编解码器)类是通过称为 hazelcast 客户端协议的不同项目生成的。客户端协议项目中的 Readme.md 应该可以帮助您创建自己的协议。 https://github.com/hazelcast/hazelcast-client-protocol

一个更重要的部分是在服务器上实现和注册一个消息任务。消息任务处理来自客户端的请求。不幸的是,这部分没有完善到使其对 SPI 用户友好。一个示例消息任务如下: https://github.com/hazelcast/hazelcast/blob/master/hazelcast/src/main/java/com/hazelcast/client/impl/protocol/task/map/MapPutMessageTask.java

【讨论】:

  • 那么,您是说我无法获取服务的实际实例,但我可以获取代理实例并远程激活现有服务对象的方法?如果是这样,这仍然适用于我的情况,这将是壮观的。
  • 我认为我的回答被误解了。不幸的是,除非您自己 fork 并更改 hazelcast 代码,否则此功能目前不可用。目前无法从 hazelcast 之外注册您自己的 messageTask。为了使它可以通过 SPI 访问,我们需要做更多的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 2014-09-04
  • 2011-06-24
  • 1970-01-01
相关资源
最近更新 更多