Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 sql server 2012 service broker external activator  [new]
Клестов А.В.
Member

Откуда:
Сообщений: 26
Добрый день коллеги!
Помогите разобраться с проблемой.

Ситуация такова, есть консольное приложение (MasHandler.exe) на C# которое должно вызываться windows-сервисом Service Broker External Activator при поступлении событий в Service Broker SQL Server 2012 но как я не бьюсь с настройками т.д. и т.п. сервис упорно пишет в логи:
05.09.2012 20:58:27	VERBOSE	Received event notification for [KLESTOV].[TestDB].[dbo].[UserTargetQueue].
05.09.2012 20:58:27 EXCEPTION ERROR = 32, No enabled application monitor is on behalf of queue [KLESTOV].[TestDB].[dbo].[UserTargetQueue].

Как я ни пробовал разобраться в чем я не прав так и не понял. Помогите.
Условия задачи:

1) SQL Server 2012 Standart
2) Service Broker External Activator для SQL Server 2012
3) Windows-сервис Service Broker External Activator запускаеться от имени Windows-пользователя с правами администратора в SQL Server
4) SQL-скрипт создания тестовой БД
use master

CREATE DATABASE TestDB
GO

use TestDB

ALTER DATABASE TestDB SET ENABLE_BROKER

CREATE MESSAGE TYPE UserMessageTypeInitiator VALIDATION = WELL_FORMED_XML;
GO

CREATE MESSAGE TYPE UserMessageTypeTarget VALIDATION = WELL_FORMED_XML;
GO

CREATE CONTRACT UserContract 
( 
	UserMessageTypeInitiator SENT BY INITIATOR,
	UserMessageTypeTarget SENT BY INITIATOR
);
GO

CREATE QUEUE UserInitiatorQueue
WITH
STATUS = ON,
RETENTION = OFF 
ON [PRIMARY]
GO

CREATE QUEUE UserTargetQueue
WITH
STATUS = ON,
RETENTION = OFF 
ON [PRIMARY]
GO

CREATE SERVICE UserInitiatorService ON QUEUE UserInitiatorQueue (UserContract);
GO

CREATE SERVICE UserTargetService ON QUEUE UserTargetQueue (UserContract);
GO

CREATE QUEUE UserExternalActivatorQueue
WITH
STATUS = ON,
RETENTION = OFF 
ON [PRIMARY]
GO

CREATE SERVICE UserExternalActivatorService ON QUEUE UserExternalActivatorQueue ([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification])

CREATE EVENT NOTIFICATION UserEventNotificationTargetQueue ON QUEUE UserTargetQueue FOR QUEUE_ACTIVATION TO SERVICE 'UserExternalActivatorService', 'current database';


5) SQL-скрипт создания тестового сообщения
use TestDB

DECLARE @ch UNIQUEIDENTIFIER
BEGIN DIALOG CONVERSATION @ch FROM SERVICE UserInitiatorService TO SERVICE 'UserTargetService' ON CONTRACT UserContract WITH ENCRYPTION = OFF;
SEND ON CONVERSATION @ch MESSAGE TYPE UserMessageTypeInitiator ('<usermessage/>');


6) Файл с конфигурацией Windows-сервис Service Broker External Activator
<?xml version="1.0" encoding="utf-16"?>
<Activator xmlns="http://schemas.microsoft.com/sqlserver/2008/10/servicebroker/externalactivator" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.microsoft.com/sqlserver/2008/10/servicebroker/externalactivator EAServiceConfig.xsd">
  <NotificationServiceList>
    <NotificationService name="UserExternalActivatorService" id="2" enabled="true" >
      <Description>UserExternalActivatorService</Description>
      <ConnectionString>
        <Unencrypted>Data Source=localhost;Initial Catalog=TestDB;Integrated Security=True;Connect Timeout=1000;Application Name=External Activator;</Unencrypted>
      </ConnectionString>
    </NotificationService>
  </NotificationServiceList>
  <ApplicationServiceList>
    <ApplicationService name="App2" enabled="true" >
      <OnNotification>
        <ServerName>localhost</ServerName>
        <DatabaseName>TestDB</DatabaseName>
        <SchemaName>dbo</SchemaName>
        <QueueName>UserTargetQueue</QueueName>
      </OnNotification>
      <LaunchInfo>
        <ImagePath>Z:\MasHandler\MasHandler\bin\Debug\MasHandler.exe</ImagePath>
        <CmdLineArgs></CmdLineArgs>
        <WorkDir>Z:\MasHandler\MasHandler\bin\Debug</WorkDir>
      </LaunchInfo>
      <Concurrency min="1" max="4" />
    </ApplicationService>
  </ApplicationServiceList>
  <LogSettings>
    <LogFilter>
      <TraceFlag>All Levels</TraceFlag>
      <TraceFlag>All Modules</TraceFlag>
      <TraceFlag>All Entities</TraceFlag>
	  <TraceFlag>Verbose</TraceFlag>
    </LogFilter>
  </LogSettings>
</Activator>


В итоге как мне кажеться все нормально. Где я накосячил не пойму.

Прошу, помогиете советом.
5 сен 12, 21:10    [13120568]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Announcing Service Broker External Activator
Тут в списке можно найти эту поделку M$.

Каков смысл поделки, ласапед от M$ или сервис соединяющийся с SQL напрямую по скрытому протоколу?

И вообще что-то я совсем от этим SQL Server Feature Pack не занимался. :(
6 сен 12, 11:27    [13122545]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Лять. Почему это сервис, почему это не либа?!!! *уки.
Естественно что нужно писать свой сервис, а не добавлять ещё одну прослойку в которой надо разбираться и поддерживать.
Естественно что инет завален похожими топиками.
Но видно что в общем по этому направлению нет заинтересованности. M$ не хотит пиарить ибо видимо стоящее для клиентов направление на котором много не нагреешь.
6 сен 12, 12:06    [13122901]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Клестов А.В.
Member

Откуда:
Сообщений: 26
Mnior
Announcing Service Broker External Activator
Тут в списке можно найти эту поделку M$.

Каков смысл поделки, ласапед от M$ или сервис соединяющийся с SQL напрямую по скрытому протоколу?

И вообще что-то я совсем от этим SQL Server Feature Pack не занимался. :(


Все это уже читал. Самплы писал не работает шарманка.
Сложилось стойкое убеждение что это поделка а не продукт.

Пока сделал себе вывод создать Windows-сервис с N потоками которые читают очередь с таймаутом ожидания поступления событий X.
Процессор не загружаеться + за счет N параллеьных читателей система выжимает из сервера все 100% потенциала.
6 сен 12, 15:02    [13124371]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Клестов А.В.
Все это уже читал. Самплы писал не работает шарманка.
Ну это почва для "всяк суда входящих".
Клестов А.В.
Сложилось стойкое убеждение что это поделка а не продукт.
Жаль. Но я попытаюсь найти время поковыряться.

Клестов А.В. нативный интерфес External Activation работает через WMI. Так что ничего делать особого не нужно.
Т.е. можно банально подписаться на данное событие для правильного обслуживания очереди.
Т.е. анализ количества потоков вы должны оставить на плеча SB - это он делать превосходно.

Если поделка от M$ просто активирует приложение, и лишь для того чтобы приложение могло спокойно закрыться когда нет сообщений, чтобы уменьшить потребление ресурсов. То чаще оно вообще не нужно. Для высоко-активных систем подавно.
Но она не решает задачу слежения за событиями активации, когда надо увеличивать количество потоков.

Если поделка активирует приложение при каждом событии, т.е. каждый экземпляр должен быть однопоточным, то тогда можно не заморачиваться на WMI, а заморачиваться на этой поделке.
Такой *nix way подход довольно неплохой и имеет преимущества модульности надёжности и независимости. Особенно когда много всяких бизнес процессов (очередей и приложений).
6 сен 12, 16:01    [13124878]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Mnior
Т.е. анализ количества потоков вы должны оставить на плечах SB - это он делает превосходно.
6 сен 12, 17:28    [13125714]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Клестов А.В.
Member

Откуда:
Сообщений: 26
Mnior
Mnior
Т.е. анализ количества потоков вы должны оставить на плечах SB - это он делает превосходно.


А вот таки нет. Потоки, они же ридеры, их количетво настраиваються руками. SB только истаеться что жить в настроенных пределах.
6 сен 12, 18:48    [13126200]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Клестов А.В.
Member

Откуда:
Сообщений: 26
Mnior
Клестов А.В. нативный интерфес External Activation работает через WMI. Так что ничего делать особого не нужно.
Т.е. можно банально подписаться на данное событие для правильного обслуживания очереди.
Т.е. анализ количества потоков вы должны оставить на плеча SB - это он делать превосходно.

Если поделка от M$ просто активирует приложение, и лишь для того чтобы приложение могло спокойно закрыться когда нет сообщений, чтобы уменьшить потребление ресурсов. То чаще оно вообще не нужно. Для высоко-активных систем подавно.
Но она не решает задачу слежения за событиями активации, когда надо увеличивать количество потоков.

Если поделка активирует приложение при каждом событии, т.е. каждый экземпляр должен быть однопоточным, то тогда можно не заморачиваться на WMI, а заморачиваться на этой поделке.
Такой *nix way подход довольно неплохой и имеет преимущества модульности надёжности и независимости. Особенно когда много всяких бизнес процессов (очередей и приложений).


Не очень понимаю зачем заморачиваться с WMI. Какие в этом плюсы?
Серьезно, мне для саморазвития интересно.

Я накопал другое решение (на основе Readme_ServiceBrokerInterface Sample - http://msftsbprodsamples.codeplex.com/wikipage?title=SS2008!Readme_ServiceBrokerInterface) -
создаем N потоков и в бесконечном цикле читаем сообщения из очереди непременно указав таймаут ожидания достаточно большим для избежания частых холостых ходов цикла.
+ Решения: CPU не расходуеться, имееться распараллеливание обработки очереди, простота.
- Решения: Постоянно работают N потоков, постоянно открыто N соединений к SQL.

Вроде решение не так ужастно.
Или я чегото не понимаю.
Хотельсь бы понять чего именно негативного в этом решении я упускаю?
6 сен 12, 19:01    [13126249]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Клестов А.В.
А вот таки нет. Потоки, они же ридеры, их количетво настраиваються руками. SB только истаеться что жить в настроенных пределах.
Пределы всегда настраиваются, для любых систем. Но количество активных потоков SB сам решает.

Клестов А.В.
Не очень понимаю зачем заморачиваться с WMI. Какие в этом плюсы?
1. Сама поделака так и работает (уверен на 90%, иначе бессмысленно и глупо)
2. Зачем вам ещё один дополнительный сервис ставить, когда можно напрямую без него делать тоже самое. Меньше элементов в системе, больше надёжность и скорость развёртывания/восстановления.

"Ваше решение" это вы просто пренебрегаете тем что уже встроено в SB.
1. Зачем тратить ресурсы на поддержку N потоков, N соединений? Вы думаете CPU/Mem/Net/Loks не используется? Ужас - новая стадия пренебрежения.
2. Но главно надёжность вашей системы на порядок ниже. Вы обязаны контролить живучесть.
Если количество ридеров динамично, то любые проблемы - падения, системные ошибки будут компенсировать новой активацией свежей копией.
3. Количество активных потоков контролирует SB, оно само следит справляется ли ридеры с потоком сообщений. Делать свой ласапед познавательно лишь академически.
4. Зачем вам тогда вообще сдался SB, можно и без него всё организовать на голых таблах. :)
5. И главное, ваша поделка выльется дороже, чем тупо подписаться на сообщения.

WMI это не какая-то там поделка, это просто то через что работают сообщения в винде, это основа на чём держится любая внешняя активация.
ServiceBrokerInterface - это не решение это пример ООП интерфейса к SB - нафиг оно сдалось и вообще не по теме, только пудрид моск.
Вы ищете какую-то волшебную палочку к непонятной штуке, но нет никакой непонятной штуки. Ничего не нужно вообще.

Вы вообще читали основы на что я кинул линк. Первый же подлинк:
BOL
Внутренняя активация

Если в компоненте Service Broker используется внутренняя активация, то наблюдение за очередью компонента Service Broker непосредственно активирует хранимую процедуру в случае необходимости. Такой подход чаще всего является самым простым и очевидным. Использование прямой активации хранимой процедуры устраняет необходимость написания в приложении дополнительного кода для управления активацией. Однако для внутренней активации необходимо, чтобы приложение было создано в виде хранимой процедуры SQL Server. В случае использования внутренней активации код приложения должен завершать работу, когда не остается сообщений для обработки.

Активация на основе событий

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

Внешняя активация компонента Service Broker является частным случаем активации на основе событий. В случае внешней активации приложение запускается в ответ на событие QUEUE_ACTIVATION.

Для событий, которые могут запускаться уведомлениями о событиях, активацию на основе событий можно сочетать с внутренней активацией компонента Service Broker. В этом случае внутренняя активация применяется в очереди, которая получает уведомление о событии. Хранимая процедура активации получает сообщение уведомления и запускает приложение.

Для других событий можно использовать агент SQL Server для запуска заданий на том же компьютере, где работает SQL Server. Можно написать приложение, которое наблюдает за событиями инструментария управления Windows (WMI) с удаленного компьютера. Приложение может запускать задачу, когда на компьютере, где работает SQL Server, происходит событие инструментария WMI.

В случае использования активации на основе событий приложение обычно завершает работу, когда не остается сообщений для обработки.
Как уже написать обработку очереди (Z:\MasHandler\MasHandler\bin\Debug\MasHandler.exe) это же не тема топика.

Вот эти 3 строки заменяют поделку:
var watcher = new System.Management.ManagementEventWatcher("\\.\root\Microsoft\SqlServer\ServerEvents\MSSQLSERVER", "SELECT * FROM QUEUE_ACTIVATION");
watcher.EventArrived += new EventArrivedEventHandler(<MyHandler>);
watcher.Start();
Что-то типа. Scope разве что нужно настроить так чтобы были все нужные права на прослушку.

Кстати вот дополнение к вашему первому посту: External Activator Security.
7 сен 12, 00:00    [13127154]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Клестов А.В.
Member

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

Спасибо за советы.
Но System.Management.ManagementEventWatcher все равно не спасает от написания своего сервиса миниторящего события.
Что в моем решение с N потоками и N конектами к SQL есть сервис что с WMI есть сервис которвый надо Вы обязаны контролить живучесть..
Плюс всеравно руками надо распараллеливать отбработку событий т.к. подписчик на эвент в моем сервисе один, а обрабатывать их надо асинхронно в N потоков (опять работа на пустом месьте).

Плюс еще проблема в том что эвенты идут непрерывно а обработчики могут обрабатывать события дольше чем интервал между событиями.
Так что если использовать WMI события и обработчики запрограммированные на обработку только 1-ого события серверное ПО теоретически может захлебнуться даже если внутри сервиса сделать свою очередь еще не обработанных событий (подчеркиваю теоретически т.к. на серверах RAM много и очередь практически неограничена в размере).
Если рассуждать далее то можно запрограммировать обработчик события так что при срабативании он последовательно по 1-му перебирает все доступные события. Но тогда это приводит к тому с какогото момента времени все N обработчиков будут работать одновременнно (N потоков) и находиться в режиме ожидания поступления события в очередь (N конектов к SQL).
7 сен 12, 14:23    [13130085]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Клестов А.В.
Member

Откуда:
Сообщений: 26
Что касаеться событий надо еще не забыть что сервис мониторящий события может быть запушем после того как БД уже создала M событий которые естветвенное ни кто не обработал и они потеряны.
Еще одна магия в сервис - при старте принудительно найти и обработать то что появилось нового в БД.
7 сен 12, 14:38    [13130248]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Клестов А.В.
Но System.Management.ManagementEventWatcher все равно не спасает от написания своего сервиса миниторящего события.
Это механизм реагирования на управление SB.
Обработчик <MyHandler> который создаёт на данные событие поток который тупо читает свою очередь согласно канонам работы SB.
Мониторить особо ничего не надо. Ну разве что если свербит в одном месте можно ставить ограничения (как жто сделано во внутренней активации).

[quot Клестов А.В.]Нет, вы не поняли суть. Если обработчик динамически создаётся. То контролить ничего не нужно.
Вот смотрите эту детскую банальность. Есть
а) ваша система - создаётся N потоков по время старта
б) WMI - подписка на сообщения, при котором создаётся поток
Нет контролинга падение у обоих.
Если потоки будут "падать", то в случае a) могут все потоки сдохнуть и в итоге работа "встанет".
В случае б) SB будет посылать сообщения, при котором будут создаваться новый потоки и в итоге сообщения будут обрабатываться.
На этом всё - ничего тут особого нет.

Клестов А.В.
Плюс всеравно руками надо распараллеливать отбработку событий т.к. подписчик на эвент в моем сервисе один, а обрабатывать их надо асинхронно в N потоков (опять работа на пустом месьте).
Вы путаете два понятия:
1) Событие активации
2) Сообщение в очереди
Событие активации - это управляющее событие SB которое контролирует количество обработчиков (читателей очередей)
Сообщение в очереди - это уже то что читает каждый ридер в цикле и обрабатывает (и создаётся через SEND CONVERSATION).
Поэтому ваши дальнейшие рассуждения не верны.

Клестов А.В.
Плюс еще проблема в том что эвенты идут непрерывно
Неправильно! Они возникают очень редко. Лишь тогда когда SB сам подсчитает что текущее количество параллельных ридеров не справляются с потоком сообщений.

Клестов А.В.
(подчеркиваю теоретически т.к. на серверах RAM много и очередь практически неограничена в размере).
Очередь хранится в реальных таблица. SB система абсолютной надёжности, если сервер упадёт сообщения не потеряются.

Клестов А.В. ваши представления о SB далеки от реальности.
7 сен 12, 15:51    [13130925]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Что-то в последнее время я всё больше слов и букав съедаю.

Так, с управляющими событиями я думаю разжевали.
Но как обязана быть организована обработка самих событий я думаю Клестов А.В. до конца не понимает.
Обработчик обязан, независимо ни от чего:
1. Обрабатывать сообщения в цикле
2. Заканчивать работу (поток уничтожается) если событий больше нет (за указанный TimeOut).
Это требования работы с системой SB и оно документировано. Если это не будет выполнятся, то ничего не гарантируется, ни нормальная работа ни то что SB сможет адекватно контролировать количество активных обработчиков.

Вернёмся к WMI.
Поковырявшись (на самом деле всё на поверхности) понял как работает WMI.
В итоге скажу что это тоже поделка и моё предположение что "service broker external activator" (SBEA) работает через него скорее не верно.
SBEA скорее делает тоже самое что и WMI, но порядок другой.
В случае WMI - приложение на него подписывается и само создаёт потоки или запускает приложения.
В случае SBEA - он сам подписывается и сам запускает приложения. Чтобы создавать потоки в рамках одного приложения, то такое сделать явно нельзя.

Оба и WMI и SBEA создают свою отдельную очередь (msdb) и подписку(и) через CREATE EVENT NOTIFICATION. Соответственно события ловятся в эту очередь.
Для WMI - операционка (служба WMI) отсылает свои подписчикам событие
Для SBEA - согласно конфигу запускает приложение.

Поэтому, если всего одно приложение то лучше не пользоваться ни SBEA ни WMI.
В добавок WMI глючит (на моей практике, вянда или SQL криво поставлены/настроены), на счёт SBEA ничего не скажу (не щупал).

Создать самому свою очередь управления и подписаться через CREATE EVENT NOTIFICATION проще, надёжнее понятнее, меньше внешних факторов и конфигурационных элементов. Более того, можно даже не делать лишнюю очередь, а основываться на одной.

Рад что всё стало понятно и теперь ни за что не буду этими поделками пользоваться.
7 сен 12, 16:44    [13131457]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Клестов А.В.
Member

Откуда:
Сообщений: 26
автор
Неправильно! Они возникают очень редко. Лишь тогда когда SB сам подсчитает что текущее количество параллельных ридеров не справляются с потоком сообщений.


Видно меня не поняли. Да события SB это элементы БД и они транзакционны - ACID.
В очередь SB собятия генерируються, ну допусьтим внешним миром, непрерывно и в большом количестве.
Их надо брабатывать.
Мы подписали наш оброботчик WMI на эти события.
Обработчиков конечное чило, не более N потоков одновременно.
Скорость поступления событий Т1. Скорость обработки событий даже при 100% использовании ЦПУ Т2.
В итоге когда Т2 < T1 имеем что наш сервис будет утоплен в событиях.
Вот собственно это и смущает меня.
7 сен 12, 17:00    [13131572]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Клестов А.В.,

Mnior
Вы путаете два понятия:
1) Событие активации
2) Сообщение в очереди

Читайте ещё раз.
7 сен 12, 17:25    [13131731]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Клестов А.В.
Да события SB это элементы БД и они транзакционны - ACID.
Нет, ни сообщения ни события SB не элементы БД. ACID к ним не имеет никакого явного отношения.
События SB не имеет смысла контролировать транзакцией и более того ни WMI ни SBEA вообще вне сервера и транзакций работают.

Клестов А.В.
В очередь SB собятия генерируються
Нет, их невозможно создать. Их генерирует сам SB по своему усмотрению.

Мы можем генерировать только сообщения но не события.
7 сен 12, 17:32    [13131768]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Клестов А.В.
Member

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

Верно подмечено.

В очередь SB сообщения генерируються, ну допусьтим внешним миром, непрерывно и в большом количестве.
Их надо брабатывать.
Мы подписали наш оброботчик на эти события (поступление сообщения).
Обработчиков конечное чило, не более N потоков одновременно.
Скорость поступления событий (в ответ на поступившеесообщение в очередь SB) Т1. Скорость обработки событий даже при 100% использовании ЦПУ Т2.
В итоге когда Т2 < T1 имеем что наш сервис будет утоплен в событиях.
Вот собственно это и смущает меня.
7 сен 12, 17:40    [13131823]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
1. Почему вы затронули эту тему? Это же выходит за рамки топика.
2. Не понимаю почему вас это смущает?
И почему вас не смущает к примеру то что SQL сервер не справляется с количеством INSERT, количеством коннектов, запросов или ещё чего-то?

Если приложение вся система не успевает обрабатывать сообщения запросы, то нужно оптимизировать их обработку, перестроить её, апгрейдить железо.
И причём тут сообщения и евенты активации?

Клестов А.В.
даже при 100% использовании ЦПУ
Ну количество CPU вы можете увеличивать. Динамически.
Запустить обработчики на других машинах.
Иначе ошибка архитектуры или взяли решить непосильную задачу.
7 сен 12, 17:52    [13131922]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Клестов А.В.
Member

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

Как я понимаю эвент активации создаеться при поступлении сообщения в очередь (может не сразу но по факту поступления сообщений)?
Поступило M сообщений будет создано M эвентов активации?

Или я что-то не понимаю.

П.С. Формально от слов и смысла топика отступили. Но остались в теме собитий SB.
7 сен 12, 18:00    [13131984]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Клестов А.В.
Member

Откуда:
Сообщений: 26
Mnior
2. Не понимаю почему вас это смущает?


Созственно смущает метя один момент.
Если в SB поступают сообщения и мы для их обработки подписались на эвент предполагая сценарий.
Одно сообщение S -> Один эвент E -> Обработчик эвента E -> Обработчик сообщения S

То если наше ПО будет запущено в сценарии

1) Наше ПО не запущено
2) В SB поступило M сообщений
3) Т.к. плписчиков нет то эвенты о поступлении сообщений ушли в /dev/null
4) Наше ПО запущено
5) В SB более не поступает сообщений
6) Наше ПО не получает никаких эвентов и M сообщений из пункта №2 не обработанными лежат в очереди.

Ведь так?
7 сен 12, 18:08    [13132030]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Клестов А.В.
Как я понимаю эвент активации создаеться при поступлении сообщения в очередь
%лядь.
Mnior
Событие активации - это управляющее событие SB которое контролирует количество обработчиков (читателей очередей)
Mnior
Они возникают очень редко. Лишь тогда когда SB сам подсчитает что текущее количество параллельных ридеров не справляются с потоком сообщений.

Вы видимо по диагонали читаете.

Ещё один ... гуманитарий. У них у всех одинаковые симптомы и проблемы.
7 сен 12, 18:12    [13132044]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Клестов А.В.
Member

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

Спасибо. Точно. Доступно!
7 сен 12, 18:22    [13132095]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Клестов А.В.
Одно сообщение S -> Один эвент E -> Обработчик эвента E -> Обработчик сообщения S
Нет не так.
Сообщение можно читать только через команду RECEIVE
Событе - это программное событие.

К сообщению приложен файл. Размер - 18Kb
7 сен 12, 18:30    [13132139]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Клестов А.В.
Member

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

Да картинка еще более закрепило мое понимание!

Итого:

1) WMI глючная трудно поддерживаемое в адекватности конфиругиции решение.
2) SBEA не заводиться.

Остаеться что-то третье подписаться самому на эвент QUEUE_ACTIVATION.

Как это сделать на C# к примеру?
7 сен 12, 18:41    [13132192]     Ответить | Цитировать Сообщить модератору
 Re: sql server 2012 service broker external activator  [new]
Клестов А.В.
Member

Откуда:
Сообщений: 26
Упс поторопился с вопросом.

http://msftsbprodsamples.codeplex.com/wikipage?title=SS2008!Readme_EventNotification
7 сен 12, 18:43    [13132197]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить