Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Service Broker  [new]
Nemoxur
Member

Откуда:
Сообщений: 179
Добрый день!

Я раньше не использовал Service Broker.

Хотел убедиться в правильности идеи.

Задача:
Необходимо произвести операцию INSERT, в db2 table2, если изменились данные в db1 table1 и этих изменений не зафиксировано в db2 table2.

Я создал одну очередь и один сервис с активированной процедурой, который будет вести монолог.

Вопрос:
Ведение диалога необходимо вешать на триггер, который будет производить анализ и если есть изменения, то будет запускать монолог, который уже запустит процедуру на вставку данных в db2 или может есть еще другие варианты кроме триггера?
4 окт 16, 10:40    [19740550]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
Nemoxur
Задача:
Необходимо произвести операцию INSERT, в db2 table2, если изменились данные в db1 table1 и этих изменений не зафиксировано в db2 table2.
А брокер тут для чего?
4 окт 16, 11:06    [19740728]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker  [new]
Nemoxur
Member

Откуда:
Сообщений: 179
Для асинхронного обмена сообщениями.
4 окт 16, 11:09    [19740751]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
А где намек на асинхронность в постановке задачи?
4 окт 16, 11:11    [19740760]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Nemoxur,

автор
Я создал одну очередь и один сервис с активированной процедурой, который будет вести монолог.


Неверно, у брокера монологов не бывает, только диалоги. Всегда создается служба для каждой из сторон диалога.
4 окт 16, 13:16    [19741703]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker  [new]
Nemoxur
Member

Откуда:
Сообщений: 179
Владислав Колосов,

Есть, вот например:

create message type [type_bk_to_exp] validation = well_formed_xml;

create contract [contract_bk_to_exp]
([type_bk_to_exp] sent by initiator);

create queue queue_bk_to_exp;

create service bk on queue queue_bk_to_exp ([contract_bk_to_exp]);

declare @ii uniqueidentifier
set @ii = '5735EE7B-008A-E611-9467-005056B1617B';
begin dialog conversation @ii from service bk to service 'bk' on contract [contract_bk_to_exp] with encryption = off
declare @msg xml = '<hello world/>';
send on conversation @ch message type [type_bk_to_exp] (@msg);

alter queue queue_bk_to_exp with activation
(
status = on,
procedure_name = proc_bk_to_exp,
max_queue_readers = 1,
execute as self
)


Ну а в процедуре
receive
из очереди.
4 окт 16, 14:44    [19742323]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Nemoxur,

это какой-то трюк, что ли? Почему Вы не хотите создать полноценный диалог? Проверяли такую систему в случае одновременных вызовов?

Если асинхронно, то через триггер. Можете CDC настроить + синхронизация в SSIS пакете вместо триггера.
4 окт 16, 16:51    [19743011]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker  [new]
Nemoxur
Member

Откуда:
Сообщений: 179
Владислав Колосов,

Спасибо, сделаю через триггер.

Я не знаю, что будет делать вторая служба-сервис.
В чём плюсы, если будет два сервиса?

Сейчас с одним сервисом вроде все прекрасно работает.


Не знаю как проверить
Владислав Колосов
Проверяли такую систему в случае одновременных вызовов
4 окт 16, 17:51    [19743260]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
Почитайте по ссылке что ли как люди реализуют шаблон pub/sub на сервисброкере.
http://rusanu.com/2011/07/20/how-to-multicast-messages-with-sql-server-service-broker/
31 окт 16, 13:45    [19841683]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3739
Владислав Колосов
Nemoxur,

автор
Я создал одну очередь и один сервис с активированной процедурой, который будет вести монолог.


Неверно, у брокера монологов не бывает, только диалоги. Всегда создается служба для каждой из сторон диалога.


Можно изобразить что-то типа fire-and-forget, если для задачи подходит
31 окт 16, 14:10    [19841875]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить