javascript - 使用 rabbitmq stomp 发送 protobuf(二进制)数据

标签 javascript rabbitmq protocol-buffers stomp content-length

我已经在客户端使用 protobuf.js 为 rabbitmq stomp 创建了一个示例。 protobuf 示例链接:https://github.com/dcodeIO/ProtoBuf.js

发送消息文件内容:-

var Game = builder.build("Game");
var Car = Game.Cars.Car;
var car = new Car("Rusty", "mayur");
var buffer = car.encode();      

var mq_username = "guest",
mq_password = "guest",
mq_vhost    = "/",
mq_url      = 'http://192.168.0.14:15674/stomp',
mq_queue1 = '/queue/A3';
var client = Stomp.client(mq_url);
function on_connect() 
{

client.send(mq_queue1, { priority: 9}, buffer); 

}
window.onload = function () 
{
client.connect(
        mq_username,
        mq_password,
        on_connect,
        on_connect_error,
        mq_vhost
      );    

}

接收文件内容:-

  var Game = builder.build("Game");
  var Car = Game.Cars.Car;
  var car = new Car("Rusty", "mayur");
  var buffer = car.encode();        

  var mq_username = "guest",
  mq_password = "guest",
  mq_vhost    = "/",
  mq_url      = 'http://192.168.0.14:15674/stomp',
  mq_queue1 = '/queue/A3';
  var client = Stomp.client(mq_url);
  function on_connect() 
  {
        un = client.subscribe(mq_queue1, on_message);

  }
function on_message(m) 
{
  console.log('message received'); 
  console.log(m);
  var buffer = m.body;
  alert(buffer);                     
  var carDec =Car.decode(buffer);                         
  alert(carDec.model);

}
  window.onload = function () 
  {
        client.connect(
            mq_username,
            mq_password,
            on_connect,
            on_connect_error,
            mq_vhost
          );    

  }

我无法解码 stomp 发送的数据(protobuf 二进制数据)。 如果通过"content-length"解决了问题,请指导我将"content-length"设置到stomp header中。

请帮助我。没人知道吗?

最佳答案

我知道我会在 2 年后回答!但我想我应该分享 :)

我正在开发一个使用 rabbitmq stomp 发送 ProtoBuf 编码数据的项目。

我遇到了同样的问题:我可以发送但无法在接收端解码。

我只是通过使用另一种编码让它工作:

  • 改变:

    var buffer = car.encode();
    

    到:

    var buffer = car.encode64();
    
  • 改变:

    var carDec =Car.decode64(buffer);
    

    到:

    var carDec =Car.decode64(buffer);
    

这解决了我的问题,我希望它也能解决您的问题。

关于javascript - 使用 rabbitmq stomp 发送 protobuf(二进制)数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16215656/

相关文章:

stream - 流处理和消息处理的区别

c# - ProtoInclude 属性是什么意思(在 protobuf-net 中)

c++ - VS2008下Protocol Buffer错误C2059

javascript - 从 SQL 行访问键

javascript - 随时写入文件,而不是按照精确的异步顺序

java - 使用 SpringAMQP 时 RabbitMQ SSL 握手失败

rabbitmq - 如何通过 RabbitMQ 发送类似 word 的文件

javascript - Microsoft Project 2016 加载项 (Javascript) 检查 Project 2016 是否

javascript - PhoneGap 构建 - 位置 API 超时

c# - 使用 Protocol buffers/Protobuf 的 PInvoke 通用字符串格式