使用 Scala 向 ApolloMQ 发送 Stomp CONNECT 帧

Posted

技术标签:

【中文标题】使用 Scala 向 ApolloMQ 发送 Stomp CONNECT 帧【英文标题】:Sending Stomp CONNECT Frame to ApolloMQ using Scala 【发布时间】:2014-02-14 14:43:28 【问题描述】:

我目前正在尝试使用 Scala 向 ApolloMQ 代理发送 CONNECT Stomp 帧。我正在执行以下操作:

val socketChannel: SocketChannel = SocketChannel.open
val socketAddress: SocketAddress = new InetSocketAddress("localhost", 61613)
val frame = "CONNECT\naccept-version:1.0,1.1,1.2\nhost:localhost\n" +
            "login:username\npasscode:password\n\n\0".toCharArray
val byteArray = frame.map  c => c.asInstanceOf[Byte] 
val bb = ByteBuffer.allocate(128)
bb.put(byteArray)

如果我然后尝试连接并写入

socketChannel.connect(socketAddress)
socketChannel.write(bb)

好像在写,但是什么都没返回,马上断开连接。如果我先倒带ByteBuffer

bb.rewind
socketChannel.connect(socketAddress)
socketChannel.write(bb)

看起来连接正在命中 Apollo,但抛出了以下内容

java.net.ProtocolException: The maximum command length was exceeded

我四处搜索,但找不到任何信息说明为什么会发生这种情况。

【问题讨论】:

【参考方案1】:

要将字符串转换为 ByteBuffer,请尝试做一个更简单的操作:

val bb = ByteBuffer.wrap(frame.getBytes("UTF-8"))

【讨论】:

以上是关于使用 Scala 向 ApolloMQ 发送 Stomp CONNECT 帧的主要内容,如果未能解决你的问题,请参考以下文章

使用 Scala 接收和发送电子邮件

Scala核心编程_第04章 程序流程控制

Scala 与 Java 的交互操作

从/向一个发送者/接收者并发接收/发送

带有 scala 客户端的 ruby​​ faye 服务器

Scala udf UnsupportedOperationException