добавлены дополнительные символы в сообщения rabbitmq - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь работать с простым экземпляром 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 = {"Name": "string"} ' Может кто-нибудь, пожалуйста, помогите мне, я не могу понять, почему это происходит !!

1 Ответ

0 голосов
/ 17 сентября 2018

Строка с полезной нагрузкой должна быть преобразована в массив байтов с использованием кодировки UTF-8:

jsonString.getBytes(Charset.forName("UTF-8"));

В этом случае не следует использовать SerializationUtils.serialize, поскольку он добавляет дополнительные метаданные о сериализованном объекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...