2014-10-20 71 views
1

我想讀取來自TCP端口的值並將它們推送到隊列中。所以當消費者可用時,他們可以從另一端消費。TCP上的ActiveMQ給出未知數據類型:47

我正在嘗試使用相同的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(); 
       } 
    } 

回答

1

您正在試圖寫入原始數據到希望使用ActiveMQ中默認的OpenWire協議接收二進制數據的套接字。您需要使用真正的客戶端,例如ActiveMQ原生Java客戶端,或者使用C++,.NET中的一個。

您可以使用STOMP傳輸連接器提供一種機制來編寫基於原始文本的命令,但您仍然需要在其中遵循STOMP協議的語義。

我建議你做一些關於JMS經紀人如何工作的更多閱讀材料。

+0

當然我會..感謝您的迴應。我在這裏擔心的是,我將連接將通過特定端口向TCP發送字符串數據的設備。例如Device to host:<’C’><0x02> ...所以我想在這個數據將是文本或字符串的形式,並不會堅持Openwire協議..就像我們有一個套接字代碼從端口讀取,不能activemq做同樣的工作? – 2014-10-21 19:28:20

+0

不,JMS經紀人怎麼會知道如何處理一些插入到套接字中的隨機數據? – 2014-10-21 20:32:11

+0

好點..我想到了它,我打算使用像Camel或servicemix這樣的東西,它可以從特定端口的套接字中選擇數據,以將其路由到JMS或其他組件。但是,我再一次遇到與上面相同的問題,因爲它在內部涉及到ActiveMQ – 2014-10-22 10:49:31