在Java中反序列化C#生成的RabbitMQ消息涉及几个关键概念和技术点。以下是详细的解答:
假设C#端使用JSON格式序列化消息,Java端反序列化这些消息。
using Newtonsoft.Json;
using RabbitMQ.Client;
public class Message
{
public string Content { get; set; }
}
public void SendMessage()
{
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
var message = new Message { Content = "Hello from C#" };
var json = JsonConvert.SerializeObject(message);
var body = Encoding.UTF8.GetBytes(json);
channel.BasicPublish(exchange: "", routingKey: "test_queue", basicProperties: null, body: body);
}
}
import com.fasterxml.jackson.databind.ObjectMapper;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
public class Message {
private String content;
// Getters and setters
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
public class RabbitMQConsumer {
private final static String QUEUE_NAME = "test_queue";
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody(), "UTF-8");
ObjectMapper mapper = new ObjectMapper();
try {
Message receivedMessage = mapper.readValue(message, Message.class);
System.out.println(" [x] Received '" + receivedMessage.getContent() + "'");
} catch (Exception e) {
e.printStackTrace();
}
};
channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
}
}
通过以上步骤和方法,可以在Java中成功反序列化C#生成的RabbitMQ消息。
领取专属 10元无门槛券
手把手带您无忧上云