使用Scala将Stomp CONNECT帧发送到ApolloMQ

时间:2014-01-23 20:23:37

标签: scala stomp apollo

我目前正在尝试使用Scala将CONNECT Stomp帧发送到ApolloMQ代理。我正在做以下事情:

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 个答案:

答案 0 :(得分:1)

要从字符串转换为ByteBuffer,请尝试更简单:

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