У меня есть внешний TCP-сервер, который прослушивает порт и как только соединение успешно выполняется клиентом, оно начнет толкать данные (можно считать это типичным публикация-подписка). Только для первоначального запроса из приложения на сервер для создания соединения сокета другие запросы не будут отправляться. Сервер подталкивает данные всякий раз, когда он имеет. Проблема заключается в том, что я установил соединение с сервером с использованием исходящей конечной точки TCP, но как я могу непрерывно прослушивать сокет, созданный моим исходящим, для получения данных, опубликованных сервером?MULE- Как прослушивать клиентский сокет, созданный исходящей конечной точкой
ответ
Один из способов разделить сокет подключения клиента к слушателю будет использовать пользовательский MessageDispatcher в соединителе исходящих TCP, как -
<tcp:connector name="TCP2" doc:name="TCP connector"
clientSoTimeout="70000" receiveBacklog="0" receiveBufferSize="0"
sendBufferSize="0" serverSoTimeout="70000" socketSoLinger="0"
validateConnections="true" keepAlive="true" sendTcpNoDelay="true"
keepSendSocketOpen="true">
<receiver-threading-profile
maxThreadsActive="1" maxThreadsIdle="1" />
<reconnect-forever />
<service-overrides dispatcherFactory="CustomMessageDispatcherFactory"/>
</tcp:connector>
Вы будете иметь диспетчерскую класс фабрики как
import org.mule.api.MuleException;
import org.mule.api.endpoint.OutboundEndpoint;
import org.mule.api.transport.MessageDispatcher;
import org.mule.transport.tcp.TcpMessageDispatcherFactory;
public class CustomMessageDispatcherFactory extends TcpMessageDispatcherFactory {
public MessageDispatcher create(OutboundEndpoint endpoint) throws MuleException
{
return new CustomMessageDispatcher(endpoint);
}
}
И CustomMessageDispatcher.class, как показано ниже -
import org.mule.api.MuleEvent;
import org.mule.api.MuleMessage;
import org.mule.api.endpoint.OutboundEndpoint;
import org.mule.api.transformer.TransformerException;
import org.mule.transport.AbstractMessageDispatcher;
import org.mule.transport.NullPayload;
import org.mule.transport.tcp.TcpConnector;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.Socket;
/**
* Send transformed Mule events over TCP.
*/
public class CustomMessageDispatcher extends AbstractMessageDispatcher
{
private final TcpConnector connector;
public CustomMessageDispatcher (OutboundEndpoint endpoint)
{
super(endpoint);
this.connector = (TcpConnector) endpoint.getConnector();
}
@Override
protected synchronized void doDispatch(MuleEvent event) throws Exception
{
/* Share the socket with the mule flow as a session variable */
Socket socket = connector.getSocket(endpoint);
event.getMessage().setInvocationProperty("ClientSocket", socket);
/* If you have something to be dispatched, you can use the below section of code */
try
{
dispatchToSocket(socket, event);
}
finally
{
connector.releaseSocket(socket, endpoint);
}
}
@Override
protected MuleMessage doSend(MuleEvent event) throws Exception {
// Not used since we do not do request-response for the outbound endpoint
return null;
}
}
I Если вы хотите слушать один и тот же сокет, вы можете использовать тот же класс для прослушивания. Вы можете написать собственную реализацию для метода doSend(). Этот метод запускается, когда конечная точка устанавливается как «запрос-ответ», и он получает массив байтов и отправляет его обратно в поток мула после назначения его в качестве полезной нагрузки. Пожалуйста, обратитесь к классу org.mule.transport.tcp.TcpMessageDispatcher.class за использование этих методов по умолчанию. FYI - Я не тестировал эту логику самостоятельно, но у меня есть аналогичная реализация для отправки объекта сокета через потоки мула. Надеюсь, это вам поможет.
- 1. Есть ли способ издеваться над исходящей конечной точкой Mule SAP?
- 2. Как написать клиентский сокет, который будет прослушивать в фоновом режиме уже созданный?
- 3. Mule почтового файл поврежден после сброса в директории с файлом исходящей конечной точкой
- 4. Mule ESB - аутентификация пользователя в исходящей конечной точке HTTP
- 5. Конфигурация TCP-сервера в Mule - запись в клиентский сокет
- 6. Как закончить серверный сокет прослушивать
- 7. Клиентский сокет читает «freezes»
- 8. Угнать клиентский сокет
- 9. Клиентский сокет на android
- 10. OCaml неблокирующий клиентский сокет
- 11. клиентский сокет вопрос «__getitem__»
- 12. Клиентский сокет сервера Python
- 13. Как вы читаете Cookies из ответа HTTP-исходящей конечной точки в Mule?
- 14. mule 3 Как я могу отправить ответ от исходящей конечной точки на другую конечную точку
- 15. Mule MTOM ошибка транспортной исходящей проверки
- 16. Отладочные сообщения HTTP-исходящей конечной точки
- 17. Mule - конфликт конечной точки файла и https
- 18. Как прослушивать сокет испускать на sails.io.js?
- 19. Как прослушивать сокет на одной странице ASP.NET
- 20. Связать SqlConnection с локальной конечной точкой IP?
- 21. Установить переменные на клиентский сокет
- 22. Игнорировать ответ от исходящей конечной точки Mule HTTP и продолжить обработку
- 23. Почему клиентский сокет принимает localhost как параметр?
- 24. Как заставить клиентский сокет ждать гнезда сервера
- 25. Как закрыть клиентский сокет в java?
- 26. Создайте клиентский сокет UDP без прослушивания сокетов
- 27. Как сделать Azure DataLake конечной точкой верблюда
- 28. Как перенаправить URL-адрес с конечной точкой?
- 29. Клиентский сокет отправляет, но сокет Silent Server не получает
- 30. Может ли приложение iOS прослушивать() в сокет?
Не могли бы вы поделиться потоком, который у вас есть до сих пор (откуда вы знаете, когда создавать соединение? Из того, что вы объяснили, вы должны слушать порт (не совсем то, что делает клиент tcp). Возможно, вам придется иметь tcp входящий вместе с исходящим. – jvas