在C#和Java之间发送Google协议缓冲消息

时间:2016-10-08 16:29:38

标签: java c# sockets rabbitmq protocol-buffers

我正在尝试获得一个好的示例程序,以便将Java协议缓冲区消息发送到Java服务器或从Java服务器发送到c#客户端。我为此目的使用RabbitMQ,但我发现RabbitMq服务不那么可靠,并且崩溃了一段时间。作为备份,我想在RabbitMq关闭的情况下使用套接字选项。 我在java中有这样的代码

ProtoBuffMessage.MessageProtBuff msgItem = clsBuilder.build();
ByteArrayOutputStream oStream = new ByteArrayOutputStream();
msgItem.writeTo(oStream);
...  
...
//Send it to RabbitMQ
m_clsChannel.basicPublish(m_clsAppSettings.getRabbitMqExchangeName(), m_clsAppSettings.getRabbitMqExchangeQueue(), null, oStream.toByteArray());

在C#端我有这样的代码来接收和解析数据

     using (var connection = factory.CreateConnection())
        using (var channel = connection.CreateModel())
        {
            channel.ExchangeDeclare(exchange: "direct_logs",
                                    type: "direct");
            var queueName = channel.QueueDeclare().QueueName;



            channel.QueueBind(queue: queueName,
                              exchange: "direct_logs",
                              routingKey: "amr");

            var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        var body = ea.Body;
                    var message = Encoding.UTF8.GetString(body);
                            var routingKey = ea.RoutingKey;
                            Console.WriteLine(" [x] Received {0}':'{1}'",
                                              routingKey, message);


                            Messaging.MessageProtBuff.Builder builder = new Messaging.MessageProtBuff.Builder();
                            builder.MergeFrom(body);

                            Messaging.MessageProtBuff data = builder.Build();
                                Console.WriteLine(data.Comment);
                    }
         }

如果它正常工作,这适用于RabbitMq。现在我想知道如何使用套接字发送它,并在C#客户端接收它并重建Object。最好我想在java代码中使用相同的ByteArrayOutputStream oStream对象。通过将其转换为字节数组,我可以通过scocket发送它并在另一端重建对象。 我在我的代码中修改了这个示例: http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html

但在本教程中,他们正在发送字符串。我想发送字节数组。如何在java端执行此操作以及如何在C#end解析相同的内容?

0 个答案:

没有答案