powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Service Broker для репликации
25 сообщений из 179, страница 1 из 8
Service Broker для репликации
    #39946380
Максим Александровитч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Есть 2 разных сервера,оба на линуксе

Необходимо настроить между ними обмен сообщениями путем брокера.
Оба сервера Developer's edition

Сделал по статье
https://www.sql.ru/forum/1284421-1/kak-obnaruzhit-oshibku-pri-rabote-service-broker

В итоге посылаю в очередь
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE @h UNIQUEIDENTIFIER;
BEGIN DIALOG CONVERSATION @h
FROM SERVICE Service1 TO SERVICE 'Service2'
ON CONTRACT DemoContract
WITH ENCRYPTION = OFF;
SEND ON CONVERSATION @h MESSAGE TYPE
DemoMessageType ('test message from server 1');
END CONVERSATION @h;


Но на другом сервере не могу извлечь..
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
DECLARE @h UNIQUEIDENTIFIER, @msg VARCHAR(MAX);
BEGIN TRANSACTION;
 WAITFOR (
 RECEIVE TOP (1) @h = [conversation_handle]
 , @msg = TRY_CONVERT(varchar, [message_body])
 FROM [Queue2]
 ), TIMEOUT 1000
 IF @@ROWCOUNT <= 0 BEGIN
 PRINT 'No messages'
 ROLLBACK TRANSACTION;
 RETURN;
 END;
 PRINT @msg
 END CONVERSATION @h;
COMMIT TRANSACTION;

(затронуто строк: 0)
No messages


Подскажите,кто может..в чем ошибка?Почему я не вижу отправленного сообщения?
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946413
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Александровитч,

Вы проверяли содержимое sys.transmission_queue на обоих серверах?

Ну и конечно sys.conversation_endpoints, чтоб 2 раза не вставать.
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946418
Максим Александровитч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegael
Максим Александровитч,

Вы проверяли содержимое sys.transmission_queue на обоих серверах?

Ну и конечно sys.conversation_endpoints, чтоб 2 раза не вставать.


Хм..пусто
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946473
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Александровитч,


добрый день, я в том топике описывал шаги для первичной диагностики. выполнили их?

если не видете сообщений в очереди то проверьте
а) sys.databases на наличие is_broker_enabled
б) на сервере источнике sys.transmission_queue
в) саму очередь отправки на наличие сообщений

в каком либо из шагов будет информация о ошибке.
еще sys.dm_broker_connections на установление вероятной ошибки транспорта
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946475
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Александровитч
Ennor Tiegael
Максим Александровитч,

Вы проверяли содержимое sys.transmission_queue на обоих серверах?

Ну и конечно sys.conversation_endpoints, чтоб 2 раза не вставать.


Хм..пусто
Т.е. вы выполняете BEGIN DIALOG, после чего шлете в него сообщение, и у вас нет ни ошибок, ни записей в sys.conversation_endpoints? Убедитесь, что смотрите в контексте правильной БД, и что вы sysadmin.
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946485
Максим Александровитч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegael
Максим Александровитч
пропущено...


Хм..пусто
Т.е. вы выполняете BEGIN DIALOG, после чего шлете в него сообщение, и у вас нет ни ошибок, ни записей в sys.conversation_endpoints? Убедитесь, что смотрите в контексте правильной БД, и что вы sysadmin.


Я скажу,более,я только что создал эти БД..
Смотрю,разумеется в контексте нужной и конечно я админ..
Есть ли еще какие-то решения на эту тему?
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946491
Максим Александровитч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Максим Александровитч,


добрый день, я в том топике описывал шаги для первичной диагностики. выполнили их?

если не видете сообщений в очереди то проверьте
а) sys.databases на наличие is_broker_enabled
б) на сервере источнике sys.transmission_queue
в) саму очередь отправки на наличие сообщений

в каком либо из шагов будет информация о ошибке.
еще sys.dm_broker_connections на установление вероятной ошибки транспорта



а) sys.databases на наличие is_broker_enabled - да,включен
б)В очереди передачи есть строки,есть to_service_name,но нет поля to_broker_instance пустые.
Message_body заполнено.
Тут

select *
from sys.conversation_endpoints
Статус Do
На что обратить внимание?
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946508
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Упс...
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946511
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Александровитч
Тут

select *
from sys.conversation_endpoints
Статус Do
Уже лучше, однако: https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-conversation-endpoints-transact-sql DO Disconnected outbound. The local side of the conversation has issued an END CONVERSATION. The conversation remains in this state until the remote side of the conversation acknowledges the END CONVERSATION. An application cannot send or receive messages for the conversation. When the remote side of the conversation acknowledges the END CONVERSATION, the conversation moves to the CD (Closed) state.Я правильно понимаю, что вы отправляете сообщение в диалог и тут же делаете ему END CONVERSATION? Не делайте так, никогда. Если вы хотите закрывать диалоги, то сей процесс должен инициироваться получателем, только после того, как тот получил все, что хотел. После этого инициатор получает на своей стороне системное сообщение EndDialog и закрывает диалог у себя.
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946522
Максим Александровитч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegael
Максим Александровитч
Тут

select *
from sys.conversation_endpoints
Статус Do
Уже лучше, однако: https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-conversation-endpoints-transact-sql DO Disconnected outbound. The local side of the conversation has issued an END CONVERSATION. The conversation remains in this state until the remote side of the conversation acknowledges the END CONVERSATION. An application cannot send or receive messages for the conversation. When the remote side of the conversation acknowledges the END CONVERSATION, the conversation moves to the CD (Closed) state.
Я правильно понимаю, что вы отправляете сообщение в диалог и тут же делаете ему END CONVERSATION? Не делайте так, никогда. Если вы хотите закрывать диалоги, то сей процесс должен инициироваться получателем, только после того, как тот получил все, что хотел. После этого инициатор получает на своей стороне системное сообщение EndDialog и закрывает диалог у себя.

Так..да,вижу что делал
END CONVERSATION @h;
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946523
Максим Александровитч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Александровитч
Ennor Tiegael
пропущено...
Уже лучше, однако:пропущено...
Я правильно понимаю, что вы отправляете сообщение в диалог и тут же делаете ему END CONVERSATION? Не делайте так, никогда. Если вы хотите закрывать диалоги, то сей процесс должен инициироваться получателем, только после того, как тот получил все, что хотел. После этого инициатор получает на своей стороне системное сообщение EndDialog и закрывает диалог у себя.


Так..да,вижу что делал
END CONVERSATION @h;


так перешел в стадию CO
state_desc = conversion
Но на получаетеле,все равно нет
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946540
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegael,

Код: sql
1.
Я правильно понимаю, что вы отправляете сообщение в диалог и тут же делаете ему END CONVERSATION? Не делайте так, никогда.



Не совсем верно, если передача предполагается в одностороннем порядке, то нарушений логики или требований документации в этом нет. Передающий сторона выполняет два действия. Первое - отправляет "полезное" сообщение, второе, при закрытии диалога, автоматически отправляет системное сообщение [ http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog%5D]http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog] и закрывает диалог со своей стороны. Принимающая сторона должна обработать оба типа сообщения и, при получении сообщения с типом EndDialog закрыть диалог на своей стороне.
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946541
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Александровитч,

Копайте sys.transmission_queue на обоих концах диалога, и также загляните в логи серверов. Не уверен насчет последних версий, но раньше ошибки транспортного уровня протоколировались там.

А, ну и вам уже советовали sys.dm_broker_connections
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946544
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Не совсем верно, если передача предполагается в одностороннем порядке, то нарушений логики или требований документации в этом нет.
Читайте до полного понимания - https://rusanu.com/2014/03/31/how-to-prevent-conversation-endpoint-leaks/
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946547
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

Я знаю, что обычно односторонняя отправка работает нормально, но в ранних версиях, на 2005 в частности, это иногда приводило к проблемам. Каким именно, сейчас боюсь уже не вспомню, за давностью лет.

ЗЫ Вот и дядюшка Римус тоже не рекомендует :авторThe fire-and-forget message exchange pattern is all too compelling, but it is riddled with problems. Ending the conversation from the target side is a much better approach.
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946550
Максим Александровитч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все здорово,у вас дискуссия.
Так мне-то куда копать?
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946555
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Александровитч,

В профайлере есть категория событий "Service Broker". Настройте трассу и мониторьте происходящее.
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946561
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Также имеется консольный вариант монитора за процессами брокера и средство диагностики. Курите мануалы. Может на линуксе это вообще не работает.
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946570
Максим Александровитч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Также имеется консольный вариант монитора за процессами брокера и средство диагностики. Курите мануалы. Может на линуксе это вообще не работает.


А как понять что не работает на линуксе-то?
Я положил в канал,вижу что ждет обработки.
А есть метод реализации не на сертификате?
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946573
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Александровитч,

у MS было где-то написано, что не работает на Линуксе. На странице скачивания, что ли. Не припомню, чтобы были ограничения на межсерверный брокер, но это не достоверно.
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946576
Максим Александровитч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Максим Александровитч,

у MS было где-то написано, что не работает на Линуксе. На странице скачивания, что ли. Не припомню, чтобы были ограничения на межсерверный брокер, но это не достоверно.



Речь про Express версию..
И то он может работать как приемник
У меня Developers edition
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946687
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Александровитч,

линуксовой версии под рукой нет, поэтому со стопроцентной гарантией утверждать не могу.

вы когда открыли диалог и отправили сообщение получателю покажите:
Код: sql
1.
2.
--на сервере источнике
select * from sys.dm_broker_connections


Код: sql
1.
2.
--на сервере получателе
select * from sys.dm_broker_connections




Код: sql
1.
2.
3.
--на сервере источнике:
use [source_db_name] --заменить на имя своей базы источника
select * from sys.transmission_queue;



Код: sql
1.
2.
3.
--на сервере получателе:
use msdb;
select * from sys.tranmission_queue;



add:
Код: sql
1.
2.
bla bla bla
end conversation @h;


так не делайте. по крайней мере сразу пока не оттестировали все возможные вариации отправки и обработки ошибок.
это плохая практика, вы потеряете сообщение об ошибке со стороны таргета если оно будет.

адд2:
а еще забыл:
Код: sql
1.
2.
--на обоих инстансах
select * from sys.routes
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946688
Максим Александровитч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Максим Александровитч,

линуксовой версии под рукой нет, поэтому со стопроцентной гарантией утверждать не могу.

вы когда открыли диалог и отправили сообщение получателю покажите:
Код: sql
1.
2.
3.
--на сервере источнике
select * from sys.dm_broker_connections
Там табла большая..что конкретное может выложить?


Код: sql
1.
2.
3.
--на сервере получателе
select * from sys.dm_broker_connections
Там табла большая..что конкретное может выложить?




Код: sql
1.
2.
3.
4.
--на сервере источнике:
use [source_db_name] --заменить на имя своей базы источника
select * from sys.transmission_queue;
Там табла большая..что конкретное может выложить?



Код: sql
1.
2.
3.
4.
--на сервере получателе:
use msdb;
select * from sys.tranmission_queue;
Пусто



add:
Код: sql
1.
2.
3.
4.
bla bla bla
end conversation @h;

Понял


так не делайте. по крайней мере сразу пока не оттестировали все возможные вариации отправки и обработки ошибок.
это плохая практика, вы потеряете сообщение об ошибке со стороны таргета если оно будет.

адд2:
а еще забыл:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
--на обоих инстансах
select * from sys.routes

Получатель
name	route_id	principal_id	remote_service_name	broker_instance	lifetime	address	mirror_address
Service1Route	65537	1	Service1	C686869B-CA80-42BA-AC37-ECF57495DCDD	NULL	TCP://10.0.40.49:4022	NULL

Иницииатор
name	route_id	principal_id	remote_service_name	broker_instance	lifetime	address
Service2Route	65537	1	Service2	6644E17A-9898-4461-AF45-6F4F770F79F5	NULL	TCP://10.0.40.248:4022

...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946690
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Александровитч,

Код: sql
1.
2.
3.
на сервере источнике: 
cmd =>
telnet 10.0.40.248 4022



Код: sql
1.
2.
3.
на сервере получателе:
cmd =>
telnet 10.0.40.49 4022



телнет проходит?
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39946692
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Максим Александровитч,

линуксовой версии под рукой нет, поэтому со стопроцентной гарантией утверждать не могу.

вы когда открыли диалог и отправили сообщение получателю покажите:
--на сервере источнике
select * from sys.dm_broker_connections
Там табла большая..что конкретное может выложить?

--на сервере получателе
select * from sys.dm_broker_connections
Там табла большая..что конкретное может выложить?



--на сервере источнике:
use [source_db_name] --заменить на имя своей базы источника
select * from sys.transmission_queue;
Там табла большая..что конкретное может выложить?



конкретно у вас есть conversation_handle сохраненный в переменной @h при открытии диалога.
найдите по нему в sys.transmission_queue источника сообщение и покажите его текст
Код: sql
1.
select try_cast(message_body as xml), transmission_status from sys.transmission_queue where conversation_handle = @h;




в dm_broker_connections нас интересует несколько последних открытых соединений их статус:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select top (10) 
state_desc,
connect_time,
authentication_method,
principal_name,
remote_user_name,
login_state,
is_accept,
sends_posted,
total_sends
from sys.dm_broker_connections 
where is_accept = 0
order by connect_time desc
...
Рейтинг: 0 / 0
25 сообщений из 179, страница 1 из 8
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Service Broker для репликации
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]