我有一个用户定义的服务,该服务是根据Hazelcast文档的第24章提供的,但是他们从未提及使客户端能够使用Hazelcast Client Instance的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">
答案 0 :(得分:0)
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