$message = new AMQPMessage(json_encode($messageBody), ['content_type' => 'application/json']);
$this->amqpChannel->basic_publish($message, 'fanout-exchange-name-' . $userId);
public function createAutodeleteQueueForUserId(string $userId): string
{
$this->createDirectExchanges();
$queueName = sprintf(
'webstomp-%s-%s',
$userId,
$this->queueSuffixGenerator->generate()
);
$this->amqpChannel->queue_declare(
$queueName,
false,
false,
false,
true,
false,
new AMQPTable(
[
'x-expires' => 60000,
'x-message-ttl' => 20000,
'x-max-priority' => 10,
]
)
);
$fanoutExchange = $this->createUserFanoutExchange($userId);
$this->amqpChannel->queue_bind($queueName, $fanoutExchange);
return $queueName;
}
// Тут сначала выполняются два АПИ запроса - на получение имени очереди и на получение настроек
// Имя временной очереди получаем по API
var queue_name = "push-subscription-2-ZWM3YzY1YjgyOTIwZGQzZDRlYzlkYzU1NmVkOTQ3MTI";
// Эти настройки тоже получаем по API от сервера
var broker_username = "stomp";
var broker_password = "stomp";
// Очередь с этими параметрами изначально создается на сервере, но чтобы подключиться к ней клиентом, параметры этой очереди должны совпадать с теми, что на сервере.
var queue_expires = 60000; // Это время жизни очереди, отведенное на подключение клиента
var queue_message_ttl = 20000; // Это ТТЛ собощений в очереди по умолчанию. Через 20 секунд сообщения, которые не доставлены клиенту - будут удалены, так как теряется их актуальность. Для сообщений с другой актуальностью можно установить конкретный ТТЛ
var queue_max_priority = 10; // Приоритет по умолчанию. Для сообщений с другим приоритетом его можно выставить индивидуально
// Далее код клиента
var client = Stomp.client('ws://' + window.location.hostname + ':15674/ws');
client.heartbeat.outgoing = 30000; // 30 секунд - исходящий heartbeat
client.heartbeat.incoming = 0; // входящий отключаем (мы так решили для себя)
client.reconnect_delay = 5000; // ожидание соединения
//client.debug = null; // для отладки раскомментировать или установить в качестве значения какой-то ИД блока, куда будет выводиться отладка. По умолчанию - в консоль.
var on_connect = function () {
client.subscribe(queue_name, function (d) {
$("#websocket").append("Получено из очереди: " + d.body + "<br />")
}, {
durable: false,
exclusive: false,
'x-expires': queue_expires,
'x-message-ttl': queue_message_ttl,
'x-max-priority': queue_max_priority
});
console.log('WEB STOMP Connected');
};
var on_error = function () {
console.log('WEB STOMP error');
};
client.connect(broker_username, broker_password, on_connect, on_error, '/');
Заметьте речь идет про ограничение доступа к сети провайдера, а не доступа в интернет.