#java #spring #iso8583 #multiplexing #jpos
Вопрос:
Я обновил свое старое приложение spring/java, которое отправляет транзакцию на удаленный ISO-сервер (банк)..При классическом подходе (channel.seng(isoMsg)) синхронизированным методом, поскольку отправка нескольких запросов ISO по одному и тому же каналу затрудняет сопоставление запроса и ответа. Слишком много транзакций оставалось в очереди, так как для получения ответа от удаленного сервера требовалось 5 секунд на каждую. Из-за чего он дошел до точки, когда все предстоящие транзакции истекли бы. Чтобы избавиться от этой проблемы, я начал внедрять QMUX. Система уже работает в режиме реального времени.
Теперь моя проблема в том, что банк сказал мне не отправлять транзакцию, если уже есть 50 транзакций, ответ на которые не получен или время ожидания истекло.
Итак,теперь мне нужно настроить MUX-фреймворк таким образом ,чтобы, как только система ожидает 50 ответов, фреймворк должен прекратить отправку и встать в очередь на моем конце, когда он получит 1 ответ, он сможет снова отправить еще одну транзакцию, чтобы общее количество ожидающих ответов было меньше или равно 50. Как я могу добиться этого с помощью QMUX МСС?
Комментарии:
1. Я полагаю, что для этого на уровне «из коробки» нет конфигурации
QMUX
, однако вы можете вызвать ее у участника транзакции внутри менеджера транзакций и настроить ее для менеджера транзакцийmax-sessions=50
. В противном случае вы можете запросить эту функциональность в проблеме или реализовать ее в PR проекта
Ответ №1:
Вы можете использовать org.jpos.iso.filter.ThroughtputControlFilter
[1] на уровне канала, но не на уровне MUX. Вы можете выбрать некоторые идеи из его реализации, чтобы обработать их в своем коде, прямо перед вызовом MUX.
Вы также можете использовать семафор.
[1] http://jpos.org/doc/javadoc/org/jpos/iso/filter/ThroughputControlFilter.html