Заголовок вопроса обозначает это как выбор между P2P и pub / sub, но тело вопроса обрамляет его как выбор между потоковой и конвейерной обработкой. Это две совершенно разные вещи.
Любой предоставленный фрагмент кода может так же легко использовать P2P или pub / sub для размещения и получения сообщений. Решение должно основываться не на скорости, а на том, требует ли данный интерфейс доставки одного сообщения нескольким получателям. Если ответ «нет», вы, вероятно, захотите придерживаться метода «точка-точка», независимо от модели потоков вашего приложения.
И, кстати, ответ на поставленный в заголовке вопрос - «нет». Когда вы используете модель «точка-точка», ваши сообщения немедленно преобразуются в пункт назначения или очередь передачи, и WebSphere MQ направляет их оттуда. С pub / sub ваше сообщение передается внутреннему процессу брокера, который разрешает ноль во многих возможных местах назначения. Только после этого шага опубликованное сообщение помещается в очередь, где на оставшуюся часть пути оно обрабатывается, как и любое другое сообщение «точка-точка». Хотя pub / sub обычно не заметно медленнее, чем точка-точка, путь к коду длиннее, и, следовательно, при прочих равных условиях, это увеличит задержку.
Другая часть вопроса касается параллелизма. Вы предложили либо раскрутить много потоков, либо разбить приложение, чтобы запросы и ответы обрабатывались отдельно. Третий вариант - запустить несколько экземпляров приложения. Вы можете объединить любой или все из них в вашем дизайне. Например, вы можете раскрутить несколько потоков запросов и несколько потоков ответов, а затем обработать экземпляры приложения для нескольких администраторов очередей.
Ключом к этому вопросу является то, имеют ли сообщения сходство друг с другом, для упорядочения зависимостей или для экземпляра приложения или потока, который их создал. Например, если я отвечаю на запрос HTTP запросом / ответом, то поток, присоединенный к сеансу HTTP, вероятно, должен быть тем, который получает ответ. Но если ответ действительно асинхронный, и все, что мне нужно сделать, это обновить базу данных данными ответа, тогда полезно иметь отдельные потоки запросов и ответов.
В любом случае возможность динамического увеличения или уменьшения количества экземпляров полезна при управлении пиковыми рабочими нагрузками. Если это достигается только за счет многопоточности, то масштабируемость производительности ограничивается верхним пределом одного сервера. Если это достигается путем раскрутки новых экземпляров приложений на одном и том же или другом сервере / QMgr, вы получаете как масштабируемость, так и балансировку рабочей нагрузки.
Дополнительную информацию по этим вопросам см. В следующей статье: Миссия: обмен сообщениями: миграция, отработка отказа и масштабирование в кластере WebSphere MQ
Кроме того, перейдите на страницу WebSphere MQ SupportPacs и найдите Performance SupportPac для вашей платформы и версии WMQ. Это те, имена которых начинаются с MP **. Они покажут вам характеристики производительности в зависимости от количества подключенных экземпляров приложения.