【问题标题】:Sharing collections between Python and Java using Hazelcast使用 Hazelcast 在 Python 和 Java 之间共享集合
【发布时间】:2017-12-13 12:01:57
【问题描述】:

我有两个程序,一个是 Java,另一个是 Python。 在 Java 上,我需要在 Hazelcast IMap 中存储一个 HashMap,并在 Python 上将其作为字典获取,这可能吗?

【问题讨论】:

  • 是的,地图和结构是相同的数据结构。然而,python 字典支持混合类型的值。 java 的映射没有 - 除非你用对象定义。
  • @dram,好的。 Hazelcast 不支持这种类型的分享?只有 Hazelcast 的收藏可以共享吗?

标签: java python hazelcast


【解决方案1】:
  1. 一切皆有可能
  2. 也许您正在寻找的东西已经实现了。
  3. 您可能需要在两个程序之间交换自己的消息。
  4. 您可以使用 AMQP、HTTP、XMPP... 来发送您的消息
  5. 您的消息可以是任何格式,例如 XML-RPC、JSON-RPC、JSON、您自己的格式……
  6. 那么...
    1. 在 Python 方面,您可以从 5 和 dict 转换为您的格式。
    2. 在 Java 方面,您从 5 和一些 Java 容器转换/转换为您的格式
  7. 祝你好运。

【讨论】:

    【解决方案2】:

    如果您想使用 Hazelcast,我建议您使用已经支持两种语言的序列化,例如 Apache Avro 或 Protobuffers。这样你就可以在两边进行序列化和反序列化。

    在 Hazelcast 中,您需要使用 StreamSerializer 接口并将序列化转发到生成的类,例如protobuf。注册序列化程序,你就可以开始了。

    【讨论】:

      【解决方案3】:

      Hazelcast 已经有一个很好的 Python 客户端库,可以用于此目的。资源可以到首页下载https://hazelcast.org/clients/python/

      代码示例在 github https://github.com/hazelcast/hazelcast-python-client/tree/master/examples 例如:

      import hazelcast
      config = hazelcast.ClientConfig()
      # Hazelcast.Address is the hostname or IP address, e.g. 'localhost:5701'
      config.network_config.addresses.append('Hazelcast.Address')
      # blocking map
      my_map = client.get_map("map-name").blocking()
      or 
      my_async_map = client.get_map("map-name")
      please check the examples in Github
      

      【讨论】:

        【解决方案4】:

        有可能,Noctarius 已经分享了这些示例。唯一需要注意的是两边都使用IdentifiedDataSerializable序列化。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-09
          • 1970-01-01
          • 2018-04-25
          • 1970-01-01
          • 1970-01-01
          • 2023-02-20
          • 1970-01-01
          相关资源
          最近更新 更多