Как отправлять в ESB (1С: Шина) прямые сообщения по amqp 1.0 на Python?

Как отправить сообщение в 1С:шину напрямую, используя Python по протоколу amqp 1.0? Я пробовал библиотеки uamqp, qpid proton, ни одну не осилил, т.к. не нашел толковых примеров реализации.

Подключаюсь к шине так:

import requests
import base64

url = 'http://localhost:9090/auth/oidc/app-token'

id = 'id-example'

secret = 'pass-example'

qry = '{id}:{secret}'.format(id=id, secret=secret)

basicAuthKey = base64.b64encode(str.encode(qry)).decode('ascii')

headers = {

'Authorization': 'Basic {}'.format(basicAuthKey),

'Content-Type': 'application/x-www-form-urlencoded'

}

resp = requests.post(url, headers=headers, data='grant_type=client_credentials')

if (not resp.ok):
    print('Auth error: ' + resp.reason)

authToken = resp.json()['id_token']

Пробовал через pika:

conn = pika.BlockingConnection(pika.ConnectionParameters('host',
                                                         port,
                                                         'channel'))
channel = conn.channel()

with open('output_dict.json', 'r') as fp:
    lines = fp.readlines()
channel.basic_publish('exchange', 'queue', ''.join(lines))

Вываливает ошибку:

pika.adapters.utils.connection_workflow.AMQPConnectorStackTimeout: Timeout during AMQP handshake

Что делать? Может не там копаю, подскажите, кто-то сталкивался с таким?


Ответы (1 шт):

Автор решения: SilverF0x-web

Решил проблему кардинально, использовал nodeJS для отправки сообщений в шину, и решил переписать весь остальной скрипт. Использовалась библиотека rhea-promise на TS , прописываем хост, токен, пароль, порт, канал в examples/send.ts

const host = process.env.AMQP_HOST || "host";
const username = process.env.AMQP_USERNAME || "sharedAccessKeyName";
const password = process.env.AMQP_PASSWORD || "sharedAccessKeyValue";
const port = parseInt(process.env.AMQP_PORT || "5671");
const senderAddress = process.env.SENDER_ADDRESS || "address";

Запускаем скрипт командой

ts-node ./examples/send.ts

Наслаждаемся успехом.

→ Ссылка