Я пытаюсь работать над простым экземпляром rabbitMQ производителя и потребителя.
public void newCustomerToQueue(Custom custom) throws Exception{
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null);
CustomWrap custom= new CustomWrap();
custom.setname(custom.getname());
String jsonString;
try {
jsonString = new ObjectMapper().writeValueAsString(custom);
// System.out.println(jsonString);
} catch (IOException e) {
throw new RuntimeException(e); //todo
}
try {
channel.basicPublish("",TASK_QUEUE_NAME, null, SerializationUtils.serialize(jsonString));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(" [x] Sent '" + jsonString + "'");
}
И мой класс приема выглядит следующим образом:
public void ReceiveLead() throws Exception{
final String TASK_QUEUE_NAME = "task_queue";
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
final com.rabbitmq.client.Connection connection = factory.newConnection();
final Channel channel = connection.createChannel();
channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null);
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
channel.basicQos(1);
final Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String message = new String(body, "UTF-8");
System.out.println("Recieved" +message);
try {
byte[] body1 = message.getBytes();
System.out.println("inside"+new String(body1));
doWork(body1);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
System.out.println(" [x] Done");
channel.basicAck(envelope.getDeliveryTag(), false);
}
}
};
channel.basicConsume(TASK_QUEUE_NAME, false, consumer);
}
Проблема в том, что когда я получаю это конкретное сообщение, в мою строку добавляются дополнительные символы. Пример: Полученный '?? t = {"Имя": "строка"} ' Может кто-нибудь, пожалуйста, помогите мне, я не могу понять, почему это происходит !!
В этом случае он генерирует исключение java.io.UnsupportedEncodingException: и мое сообщение никогда не передается получателю
Вам нужно использовать ту же кодировку jsonString.getBytes(Charset.forName("UTF-8"));
Спасибо, теперь работает :)




Строку с полезной нагрузкой нужно преобразовать в массив байтов в кодировке UTF-8:
jsonString.getBytes(Charset.forName("UTF-8"));
SerializationUtils.serialize не следует использовать в этом случае, поскольку он добавляет дополнительные метаданные о сериализованном объекте.
Вероятно, это происходит из-за того, что вы используете
SerializationUtils.serialize. Попробуйте преобразовать строку в байты:jsonString.getBytes()