java - TCP 上的 ActiveMQ 提供未知数据类型 : 47

标签 java sockets tcp activemq

我想读取来自 TCP 端口的值并将它们推送到队列中。这样当消费者可用时,他们就可以从另一端消费。

我正在尝试使用 ActiveMQ。我保留了默认的 activemq.xml:

    <transportConnectors>
        <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
        <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    </transportConnectors>

如何使用 ActiveMQ 将数据从 TCP 端口推送到队列?

当我运行代码以连接到 TCP 套接字时,我得到:

jvm 1    |  WARN | Transport Connection to: tcp://127.0.0.1:50473 failed: java.i
o.IOException: Unknown data type: 47

我运行的代码如下:

public static void main(String argv[]) throws Exception
    {
              try
              {
                 Socket client = new Socket("localhost", 61616);
                 OutputStream outToServer = client.getOutputStream();
                 DataOutputStream out = new DataOutputStream(outToServer);
                 DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
                 Date todayDate = new Date();
                 out.writeUTF(dateFormat.format(todayDate)+"  Content gets received in server"+"\n");

                 client.close();
              }catch(IOException e)
              {
                 e.printStackTrace();
              }
    }

最佳答案

您正尝试使用 ActiveMQ 中默认的 OpenWire 协议(protocol)将原始数据写入期望接收二进制数据的套接字。您需要使用一个真正的客户端,例如 ActiveMQ native java 客户端,或 C++、.NET 中的客户端。

您可以使用 STOMP 传输连接器提供一种机制来编写基于原始文本的命令,但您仍然需要在那里遵守 STOMP 协议(protocol)的语义。

我建议您多阅读一些有关 JMS 代理的一般工作原理的文章。

关于java - TCP 上的 ActiveMQ 提供未知数据类型 : 47,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26464074/

相关文章:

java - 在 Android 和 PC 之间创建 Wifi 点对点连接

java - 如何检测丢失的 MySQL 服务器但仍允许长时间运行的查询

c# - 如何通过互联网向多个客户端发送音频/视频?

java - Netty - 客户端难以读取响应

python - 在 Debian 系统上登录时运行一个简单的 Python TCP 服务器

Java-RAM 和静态变量的好处

java - ArrayList removeAll() 不删除对象

java - 是否可以在 Web 应用程序中使用嵌入式数据库?

java - android - 从文本文件中逐行读取

java - LDAP 和 JNDI 的 ServiceUnavailableException