Как динамически согласовать SenderCompID и TargetCompID в quickfixj?

Предположим, что я управляю онлайн-биржей, и на ней регистрируется новый клиент. Я даю этому клиенту новый CompID, и теперь я хочу добавить этот CompID к своему акцептору. Нужно ли перезапускать мой акцептор или это можно сделать динамически?

Кажется не очень масштабируемым необходимость заранее согласовывать CompID, а затем вставлять его куда-нибудь в конфигурацию.

Я видел несколько примеров, которые предположительно делают это, но они, похоже, просто меняют конфигурацию, чтобы практически игнорировать CompID отправителя/цели, установив для них значение *. Любые другие способы сделать это?


person Kiril    schedule 29.10.2013    source источник


Ответы (2)


Взгляните на DynamicAcceptorSessionProvider и на то, как он используется в примере Executor. Пример Executor считывает «шаблоны» сеанса из файла настроек и связывает их с IP-адресом конечной точки акцептора. Шаблон акцептора идентифицируется настройкой «AcceptorTemplate=true». Любое из полей идентификатора сеанса, включая версию FIX, может быть подстановочным знаком, а не только SenderCompID.

См. executor_dynamic.cfg для примера определения шаблонов сеансов. В этой конфигурации для SenderCompID и TargetCompID используются подстановочные знаки, и определяются шаблоны для различных версий FIX (чтобы указать соответствующий файл словаря данных).

Когда приходит сообщение для неизвестного идентификатора сеанса, DynamicAcceptorSessionProvider попытается сопоставить идентификатор сеанса с идентификатором сеанса шаблона с подстановочными знаками. Если он находит совпадение, новая сессия будет создана автоматически и добавлена ​​к акцептору, как если бы она была явно определена в настройках. Новый сеанс будет иметь настройки, определенные в шаблоне сеанса-акцептора.

DynamicAcceptorSessionProvider — это реализация AcceptorSessionProvider, которая использует файл настроек для поддержки создания динамического сеанса. Однако вы также можете реализовать собственный AcceptorSessionProvider, который может динамически создавать сеансы, например, на основе информации из базы данных.

person Frank Smith    schedule 30.10.2013

Я думаю, вы хотите исправить TargetCompID и отправить каждому пользователю уникальный SenderCompID. Затем вы устанавливаете SenderCompID в своей конфигурации акцептора на *. Это позволит принять все SenderCompID. Однако вам понадобится где-то в вашем коде средство для проверки каждого заказа по вашей базе данных пользователей. Если пользователь (SenderCompID) недействителен, вы отправите сообщение об отклонении. Многие реализации также будут использовать туннели и IP-адреса из белого списка, чтобы гарантировать отсутствие нежелательных подключений.

person robthewolf    schedule 29.10.2013
comment
В примерах quickfixj акцептор Исполнителя принимает настройки, в которых SenerCompID равно EXEC, а TargetCompID равно BANZAI. Я предполагаю, что это означает, что установка SenderCompID акцептора на * приведет к тому, что сообщения, исходящие от акцептора, не будут идентифицированы с отправителем. Все примеры, которые я видел, указывают на то, что SenderCompID является идентификатором текущего отправителя (в данном случае, если это акцептор, то это CompID биржи). - person Kiril; 29.10.2013
comment
Я вообще не слежу за вашим комментарием. - person robthewolf; 30.10.2013