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

Черт..
у вас написано на сурсе
create certificate [auth_cert_serv2] from file = 'brokercert\auth_cert_serv2.cer'
with private key (file='brokercert\auth_cert_serv2.pvk',
encryption by password = 'Pa$$w0rd', decryption by password = 'Pa$$w0rd');



где вы у меня такое увидели?

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

Черт..
у вас написано на сурсе
create certificate [auth_cert_serv2] from file = 'brokercert\auth_cert_serv2.cer'
with private key (file='brokercert\auth_cert_serv2.pvk',
encryption by password = 'Pa$$w0rd', decryption by password = 'Pa$$w0rd');



где вы у меня такое увидели?

вы же с этого поста делали?
Service Broker для репликации


Да,мой косяк..интерпретировал..
в итоге все норм.Веде нужное шифрование
выполнил на сурсе
declare @h uniqueidentifier;
begin dialog conversation @h
from service [s1] to service N's2'
with encryption = off;

send on conversation @h ('hello');
На таргете ничего

--target
declare @h uniqueidentifier, @m varbinary(max);
receive top(1) @h = conversation_handle, @m = [message_body] from [q2];
if @h is not null begin
select cast(@m as varchar(max)) as [message];
end conversation @h;
end;
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39947299
Максим Александровитч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вопрос..маршрут создаем на сурсе с айпи адресом таргета?
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39947300
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Александровитч,

теперь покажите результат
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
--source
select [conversation_handle], [to_service_me], [from_service_name], try_cast([message_body] as xml]), [transmission_status] from sys.transmission_queue;

select [conversation_handle], [state_desc], [far_service] from sys.conversation_endpoints;

select [state_desc], [login_state], [login_time], [principal_name], [remote_user_name] from sys.dm_broker_connections;

select * from sys.service_broker_endpoints;




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
--target
use msdb;
go
select * from sys.transmission_queue;

use [имя базы];
go
select [conversation_handle], [state_desc], [far_service] from sys.conversation_endpoints;
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39947301
Максим Александровитч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм..нет сервисов привязки удаленной службы
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39947302
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Александровитч,

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

теперь покажите результат
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
--source
select [conversation_handle], [to_service_me], [from_service_name], try_cast([message_body] as xml]), [transmission_status] from sys.transmission_queue;

select [conversation_handle], [state_desc], [far_service] from sys.conversation_endpoints;

select [state_desc], [login_state], [login_time], [principal_name], [remote_user_name] from sys.dm_broker_connections;

select * from sys.service_broker_endpoints;




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
--target
use msdb;
go
select * from sys.transmission_queue;

use [имя базы];
go
select [conversation_handle], [state_desc], [far_service] from sys.conversation_endpoints;




Таргет пусто

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

роуты прописали?

Код: sql
1.
select * from sys.routes



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

роуты прописали?

Код: sql
1.
select * from sys.routes



учтите я в примере там ip-адреса от балды написал, если делали тупо ctrl+cv то работать не будет


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

name route_id principal_id remote_service_name broker_instance lifetime address mirror_address
to_s2 65537 1 s2 <guid from step 10> NULL TCP://10.0.40.248:4022 NULL
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39947386
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Александровитч,

о госпаде.
ну а это че такое? "<guid from step 10>"

вы должны были заменить эту строку на гуид из шага 10 и точно также с обратным маршрутом. маршрут - это указание куда брокер должен ломиться что бы найти нужную ему службу.

remote_service_name - это имя искомой службы
broker_instance - это гуид брокера базы данных (можно сказать идентификатор базы грубо)
address - путь до сервера на котором располагается база

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

о госпаде.
ну а это че такое? "<guid from step 10>"

вы должны были заменить эту строку на гуид из шага 10 и точно также с обратным маршрутом. маршрут - это указание куда брокер должен ломиться что бы найти нужную ему службу.

remote_service_name - это имя искомой службы
broker_instance - это гуид брокера базы данных (можно сказать идентификатор базы грубо)
address - путь до сервера на котором располагается база

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


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

о госпаде.
ну а это че такое? "<guid from step 10>"

вы должны были заменить эту строку на гуид из шага 10 и точно также с обратным маршрутом. маршрут - это указание куда брокер должен ломиться что бы найти нужную ему службу.

remote_service_name - это имя искомой службы
broker_instance - это гуид брокера базы данных (можно сказать идентификатор базы грубо)
address - путь до сервера на котором располагается база

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


Черт..да,не все что написано надо копипастить..спс


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


Черт..да,не все что написано надо копипастить..спс


Переделал
Вот сурс


картинкой на обоих серверах:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select [service_broker_guid] from sys.databases where [database_id] = db_id();
select [name], [remote_service_name], [broker_instance], [address] from sys.routes;
select top (1)
      ce.[conversation_handle], 
      ce.[state],
      ce.[far_broker_instance],
      ce.[security_timestamp],
      tq.[from_service_name],
      ce.[far_service],
      cast(tq.[message_body] as xml) as [msg],
      tq.[transmission_status]
from sys.conversation_endpoints ce
    left join sys.transmission_queue tq on tq.[conversation_handle] = ce.[conversation_handle]
order by ce.[send_sequence] desc;



и на таргете дополнительно:
Код: sql
1.
select * from sys.database_permissions where grantee_principal_id = 0 and class = 17;
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39947433
Максим Александровитч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сурс
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39947434
Максим Александровитч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таргет
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39947437
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Александровитч,

посмотрите внимательно на маршруты, ошибку видите? я лично вижу. и на сообщение в transmission status оноявно говорит что что то не так :)

подсказака аналогия:

вы живете в москве на улице Достоевского 11111
я живу в питере на улице Ленина 55555
вам нужно отправить мне письмо.

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

а вот сейчас у вас там почтовики будут пытаться искать адрес Москва ул.Ленина 55555 и не факт что найдут

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

посмотрите внимательно на маршруты, ошибку видите? я лично вижу. и на сообщение в transmission status оноявно говорит что что то не так :)

подсказака аналогия:

вы живете в москве на улице Достоевского 11111
я живу в питере на улице Ленина 55555
вам нужно отправить мне письмо.

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

а вот сейчас у вас там почтовики будут пытаться искать адрес Москва ул.Ленина 55555 и не факт что найдут



То есть remote_service_name не тот?В том поле должно быть имя удаленного сервиса,куда идет отправка?
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39947471
Максим Александровитч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но,с другой стороноы,не настроен remote_service_binding
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39947475
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Александровитч,

нет. remote service name правильный, а вот broker instance guid не тот.

еще раз: у вас должна быть ПЕРЕКРЕСТНАЯ маршрутизация:

у вас сервис s2 располагается на таргете.

соурс о s2 ничего не знает. создав маршрут в соурсе вы говорите службу s2 ищи по такому то ip-адресу в базе вот с таким guid.
поэтому в маршруте указываются реквизиты удаленной службы (ip адрес другого сервера, guid другой базы)
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39947478
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Александровитч
Но,с другой стороноы,не настроен remote_service_binding


remote service binding нужен для аутентификации в другой базе, не путайте теплое с мягким.
у вас же сейчас аутентификация анонимная, никаких привязок не нужно.
привязки нужны только когда для аутентификации используются сертификаты на уровне безопасности диалога. (не путать с транспортной безопасностью)
...
Рейтинг: 0 / 0
Service Broker для репликации
    #39947482
Максим Александровитч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Максим Александровитч
Но,с другой стороноы,не настроен remote_service_binding


remote service binding нужен для аутентификации в другой базе, не путайте теплое с мягким.
у вас же сейчас аутентификация анонимная, никаких привязок не нужно.
привязки нужны только когда для аутентификации используются сертификаты на уровне безопасности диалога. (не путать с транспортной безопасностью)


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

google:
1)t-sql receive
2)t-sql send


еще почитайте статьи Dave Wentzel
https://davewentzel.com/content/service-broker-demystified-series/

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

google:
1)t-sql receive
2)t-sql send


еще почитайте статьи Dave Wentzel
https://davewentzel.com/content/service-broker-demystified-series/

там все подробно расписано.


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

google:
1)t-sql receive
2)t-sql send


еще почитайте статьи Dave Wentzel
https://davewentzel.com/content/service-broker-demystified-series/

там все подробно расписано.


Спс..сам бы я долго и упорно ковырялся б.
Пойду гуглить
Если у вас есть какой-ть готовый скрипт посмотрел бы


странный вопрос. у меня есть такие скрипты что вам в страшном сне не приснятся :)
что именно вам требуется?

общей практики обработки сообщений нет, есть вариации в зависимости от задачи и конфигурации системы.
в самом примитивном варианте на двух очередях используются две процедуры внутренней активации
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
create or alter proc usp_target
as
declare @h uniqueidentifier, @mt sysname, @mb varbinary(max);
while 1 =1 begin
       begin tran;
       waitfor (
           receive top(1) @h = conversation_handle, @mt = message_type_name, @mb = message_body from [target_queue]
       ), timeout 1000;
       
       if @@rowcount =0 begin
             rollback tran;
             break;
       end;

       if @mt = 'DEFAULT'
            exec some_business_logic_proc @mb;
       else
            exec some_handling_message_proc @mt, @mb;

       end conversation @h;
       commit;
end;



вторая процедура еще проще, она просто читает ответные сообщения и закрывает диалог на стороне инициатора

но это при учете что сообщения поступают 1 сообщение = 1 диалог.
вариаций может быть много:
1 диалог - много сообщений
несколько диалогов - одна группа диалогов
связанные группы (логически)
связанные диалоги (логически)
и.т.д. и.т.п.
все зависит от фантазии разработчика и потребностей бизнеса, можно вычитывать сообщения пачками, можно по одному. нужна ли степень параллелизма выполнения процедур активации.
поэтому универсального шаблона нет.
...
Рейтинг: 0 / 0
25 сообщений из 179, страница 4 из 8
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Service Broker для репликации
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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