У меня есть требование, когда я должен отправить сообщение в Microsoft Teams. Я пытаюсь извлечь информацию об имени канала «в» из сообщения, которое я получаю из очереди, и на основе имени канала я читаю его URL-адрес из файла свойств и отправляю сообщение. Ниже приведен код для этого.
RouteDefinition from = from("jms:queue:teamsq?connectionFactory=artemis");
from.setHeader("Exchange.CONTENT_TYPE", constant("application/json"));
final StringBuffer channelName = new StringBuffer();
from.process(exchange -> {
String[] dataArray = exchange.getIn().getBody(String.class).split(",", 2);
channelName.append(dataArray[0]);
exchange.getIn().setBody("{\"text\" : \"" + dataArray[1].trim() + "\"}");
})
.log("Body is : " + channelName + " : ${body}");
Когда тело регистрируется, значение channelName равно null.
Любая помощь, как я могу получить значение channelName вне этого метода process()?
Сообщение, полученное из очереди,
channel1, This is test a message 5
Заранее спасибо.
Вы можете задать заголовок сообщения или свойство Exchange. Обе являются своего рода переменными сообщения для использования во время обработки маршрута.
.setHeader("channelName", channelName.toString())
.setProperty("channelName", channelName.toString())
Основное отличие состоит в том, что свойства Exchange хранятся на Camel Exchange, а заголовки сообщений являются частью самого сообщения.
Camel Exchange — это оболочка сообщения Camel. Он создается, когда сообщение входит в маршрут и отбрасывается в конце маршрута.
Свойства биржи:
Заголовки сообщений:
Если вы отправляете сообщение с маршрута Camel в очередь JMS и используете его с другого маршрута, свойства Exchange больше не будут доступны, а заголовки сообщения все еще присутствуют.
Однако если вы направляетесь к прямой конечной точке (конечная точка Camel в памяти), весь Exchange передается, а свойства Exchange по-прежнему доступны.
Спасибо. Это помогло. Хотя нет прямого способа извлечь этот заголовок, например, getHeaer() или что-то в этом роде, но используя selection() и сравнение, я смог найти обходной путь.