Как отправить сообщение на конечную точку в Mule 4, чтобы запустить поток

С Mule 3 можно было асинхронно отправлять сообщения на конечную точку с помощью MuleClient:

MuleClient client = new MuleClient(muleContext);
client.dispatch("vm://vm.queue", "Message Payload", null);

Есть ли способ перенести эту функцию в Mule 4, поскольку MuleClient был удален?

Я наткнулся на пост, в котором предлагалось получить поток по имени и опубликовать сообщение в потоке следующим образом

Flow flow = registry.lookupByName("MyFlow").get();
InputEvent event = new DefaultInputEvent();
event.message(Message.of(payload));
flow.execute(event);

но я получаю исключение ClassNotFoundException для класса org.mule.runtime.internal.event.DefaultInputEvent

Вам нужно делать это только через Java? или dataweve будет работать?

Harshank Bansal 23.11.2022 17:23

Желательно через модуль Spring или Java.

William 23.11.2022 17:25

Я не пробовал, но нашел это. Возможно, это поможет: Вызов потоков Mule4 из кода Java

Harshank Bansal 23.11.2022 17:38

Почему вам нужно сделать это из Java? Понимание контекста может помочь найти решение.

aled 23.11.2022 17:52

Обратите внимание, что в Mule 4 конечные точки не существуют. Метод, которым поделился @HarshankBansal, заключается в запуске потока, а не его слушателя. Также требуется разработать расширение Mule. При использовании модуля Java не рекомендуется использовать API-интерфейсы или типы Mule.

aled 23.11.2022 18:44

У меня есть DeploymentListener, которому нужно отправлять уведомления при изменении состояния запущенных приложений, а также у меня есть spring bean-компоненты, которым необходимо уведомлять клиентов при выполнении определенных условий.

William 23.11.2022 18:45

Я не уверен, что прослушиватель развертывания поддерживается внутри приложения. По крайней мере, они не задокументированы: docs.mulesoft.com/mule-runtime/4.4/mule-server-notifications

aled 23.11.2022 18:52

Я пытался использовать уведомления, но не смог получить экземплярnotificationDispatcher. В документации не указано, какой это класс и как его получить.

William 23.11.2022 19:05

Как я могу заставить эти уведомления запускать поток?

William 23.11.2022 19:52

Это был бы другой вопрос.

aled 23.11.2022 20:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
10
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используя рекомендацию Харшанка, я смог отправлять сообщения в поток, просто получая ссылку на поток и запуская поток, отправляя сообщения источнику.

Flow flow = registry.lookupByName(flowName).get();
ComponentLocation location = DefaultComponentLocation.from(flowName + "/source");
...
Message message = Message.of(payload);
CoreEvent coreEvent = CoreEvent.builder(EventContextFactory.create(flow, location)).message(message).build();
flow.process(coreEvent);

Это гораздо более чистое решение, чем то, что реализовано в блоге, и работает с bean-компонентами, инициализированными в модуле Spring. Как уже упоминалось, это плохая практика, но в интересах времени это решение.

Другие вопросы по теме