【问题标题】:Can we serialize the java Socket Object to send over Kafka queue我们可以序列化 java Socket 对象以通过 Kafka 队列发送吗
【发布时间】:2019-12-30 14:54:33
【问题描述】:

我们能否通过队列发送 Java.net.Socket 对象并接收到它,在将数据发送到客户端后进行一些操作并关闭 Socket 对象。

我尝试了序列化和反序列化,但我不确定套接字是否支持序列化和反序列化。

谢谢, 赫如希

【问题讨论】:

  • 这将如何运作?与打开套接字的进程不同的进程如何关闭它?
  • 实际我想使用相同的 Socket 对象,通过套接字发回回复。但是代码流程不同,这就是我使用队列的原因,通过队列发送数据以及套接字。一旦我收到它,将进行一些操作并使用相同的套接字对象通过套接字将数据发送回并关闭它。对于这种情况,您有什么可能的方法吗?
  • 您不能序列化套接字。您只能将套接字传递给子进程,而不是通过 Kafka。您必须将数据带回持有套接字的原始进程,以便它可以将其发送出去。
  • 哦。所以我可能需要调用回调函数通过套接字将数据发回并关闭套接字,一旦另一个进程读取数据并处理它。
  • Kafka 回调在这里不会有用。我找到了解决方案(可能很奇怪),使用静态映射来存储带有一些唯一键的套接字对象。通过 Kafka 队列在另一个代码流中发送唯一键,并再次从 kafka 队列中检索对象以在同一个调用中通过套接字发送回复。

标签: java sockets serialization apache-kafka


【解决方案1】:

由于 Java.net.Socket 类没有实现 Serializable,生产者无法将其写入 Kafka 以供消费者使用。它不是 Serializable 的原因与您可能不想这样做的原因相同:一旦您构建了一个 Socket,您真的不能将对象本身传递到 JVM 之外并且仍然能够调用该套接字.

话虽如此,您可以编写用于构造 Socket 的参数(例如,编写包含主机和端口的 Kafka 消息),然后让消费者使用该信息构造自己的套接字,然后与套接字交互.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-03
    • 2011-03-16
    • 2011-06-21
    • 2011-05-14
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多