标签: service-broker

如何删除服务代理队列中的消息

我想在SQL Server Management Studio中清除队列,但我不想删除整个队列中的队列内容(消息).

谢谢,塞纳

sql-server queue service-broker

17
推荐指数
3
解决办法
5万
查看次数

Sql Server Service Broker:如何构建简单队列方案的对话?

我是一个Sql Server Service Broker新手,我正在尝试掌握为一个(看似)简单的用例设置Service Broker的最佳方法:我想创建一个简单的工作队列,其中一个应用程序将工作项丢弃到队列和单独的应用程序从该队列中获取工作项并处理它们.第一个应用程序不需要从第二个应用程序返回状态消息.我希望队列存在于单个Sql Server实例中.

最令我困惑的是对话/对话与这种情况的关系.我知道你只能在对话/对话的上下文中发送/接收消息,但由于这两个应用程序之间没有来回的喋喋不休,我对于何时是创建新会话的正确时间感到迷茫.两种极端的替代方案似乎是:

  • 每次我排队工作项目,我都会开始一个新的对话.因此,每个对话最终都只有一条消息.
  • 在部署时,我手动创建一个无限寿命对话.在将工作项排入队列时,我总是将其作为单个对话的一部分发送.

走这些路线的后果是什么?

此外,在第一种情况下,似乎我需要进行一些END CONVERSATION,以便Sql Server能够在内部清理资源.什么时候将它们放入正确的地方是否有任何指导?(或者最终依靠对话超时可能会更好?)

sql-server queue service-broker

16
推荐指数
2
解决办法
7304
查看次数

什么是SQL Server中的Service Broker?

什么是SQL Server中的Service Broker,在简单数据库中启用它是否有意义,而不是在分布式数据库中启用它?

.net sql sql-server service-broker

14
推荐指数
2
解决办法
1万
查看次数

数据库还原后Service Broker无法正常工作

在服务器上设置了一个正常运行的Service Broker,我们正在迁移到新服务器,但我似乎无法在新机器上设置Service Broker.

已经做了明显的(对我来说)像DB上的启用代理,丢弃路由,服务,合同,队列甚至消息类型并重新添加它们,使用STATUS ON设置ALTER QUEUE

SELECT*FROM sys.service_queues

给我一个队列列表,包括我自己的两个队列,显示为activation_enabled,receive_enabled等.

不用说队列不起作用.当我把消息丢进他们时,没有任何东西进入,什么都没有出来.

有任何想法吗?我确信我错过了一些非常明显的东西......

sql-server service-broker

14
推荐指数
2
解决办法
1万
查看次数

如何使用SqlCacheDependency?

我需要为一个表实现SqlCacheDependency,这将依赖于这个查询: SELECT Nickname FROM dbo.[User].

我为此创建了一个方法:

private IEnumerable<string> GetNicknamesFromCache()
    {
        const String cacheValueName = "Nicknames";

        var result = HttpRuntime.Cache.Get(cacheValueName) as List<String>;
        if (result == null)
        {
            result = _repository.GetAllNicknames();

            var connectionString = ConfigurationManager.ConnectionStrings["RepositoryContext"].ConnectionString;
            var sqlConnection = new SqlConnection(connectionString);
            var sqlCommand = new SqlCommand("SELECT Nickname FROM dbo.[User]", sqlConnection);
            var sqlDependency = new SqlCacheDependency(sqlCommand);

            HttpRuntime.Cache.Insert(cacheValueName, result, sqlDependency);
        }

        return result;
    }
Run Code Online (Sandbox Code Playgroud)

但是,当我运行我的应用程序时,它不起作用.我检查了订户列表(sys.dm_qn_subscriptions表),没有记录.

我调查了很多时间,并且已经尝试了各种解决方案,但它们对我不起作用:

  • 使用可信连接并为公共角色设置一些权限:

    GRANT CREATE PROCEDURE TO public
    GRANT CREATE QUEUE TO public
    GRANT CREATE SERVICE TO public …

.net c# sql-server caching service-broker

14
推荐指数
1
解决办法
2万
查看次数

SQL Service Broker和.NET Windows服务 - 最佳实践?

我目前有一个从遗留应用程序更新的数据库.我想利用SQL Service Broker队列,以便在更新记录时,将消息放入队列中(使用触发器或其他东西).

然后,我希望有一个长时间运行的应用程序(用.NET编写的Windows服务),它不断"监听"队列以获取消息并处理它们以用于另一个应用程序.

我在网上找到了一些示例代码,只想获得一些关于代码是否可靠的输入.所以,这是Windows服务类的缩写版本:

public class MyService
{
    public void StartService()
    {
        Thread listener = new Thread(Listen);
        listener.IsBackground = true;
        listener.Start();
    }

    private void Listen()
    {
        while (true)
        {
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                string commandText = "WAITFOR ( RECEIVE * FROM MyQueue);";
                using (SqlCommand command = new SqlCommand(commandText, connection))
                {
                    connection.Open();
                    command.CommandTimeout = 0;
                    SqlDataReader reader = command.ExecuteReader();
                    while (reader.Read())
                    {
                        // Process message
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你怎么看?代码完全按照我想要的方式工作.但是,关闭包含SQL命令的新线程的想法永远不会超时 - 在无限循环内 - 让我有点紧张.

.net sql-server service-broker

12
推荐指数
1
解决办法
3625
查看次数

到MSMQ或不到MSMQ?(或SQL表作为队列)

我有一个分布式系统,其中将有1个SQL Server,1-n处理服务器和1-n数据供应商(网络中的硬件设备).提供的数据需要在进入关系数据库结构之前进行处理 - 由处理服务器执行(作为Windows服务 - .net代码来解析数据,处理数据并将其插入关系结构中.)
处理潜力加载而不是减慢数据供应商的速度,我想实现一个队列,但我不确定我是否想要将MSMQ服务器的复杂性添加到混合中.是否有一个很好的MSMQ替代方案,例如使用DB(平面表)作为队列?.NET是否为DB队列提供了任何开箱即用的支持,还是有另一种可靠的排队选项?
谢谢

编辑:(11月29日,晚上11:30)
听起来像SQL Service Broker(SSB)可能会这样做.
http://www.netframeworkdev.com/windows-communication-foundation/service-broker-vs-msmq-as-reliable-queueing-mechanism-63981.shtml

编辑:(11月30日,上午7:45)
发现另一个非常有用的链接:
http://social.msdn.microsoft.com/Forums/en-US/sqlservicebroker/thread/52687510-0852-44f3-bfcd-83610d1c1b9a
我也在研究将要提供的数据的最大/最小尺寸.在他们的头顶,有谁知道MSMQ和/或SSB容纳的最大尺寸?
MSMQ:4MB消息大小
SSB:2GB消息大小

编辑:(30 nov,8; 15am)
MSMQ和SSB之间的比较:
消息队列的良好策略?

.net sql-server msmq service-broker

12
推荐指数
1
解决办法
2804
查看次数

从SQL Server服务代理调用SSIS与SSISDB实现

要求是通过SSIS调用Web服务并从SQL Server Service Broker激活的存储过程调用SSIS.

这是我目前正在做的事情:

队列

   CREATE QUEUE [schema].[ProccessingQueue] WITH STATUS = ON , RETENTION = OFF , ACTIVATION (  STATUS = ON , PROCEDURE_NAME = [schema].[usp_ProccessingQueueActivation] , MAX_QUEUE_READERS = 10 , EXECUTE AS N'dbo'  ), POISON_MESSAGE_HANDLING (STATUS = ON) 
Run Code Online (Sandbox Code Playgroud)

我的存储过程:

ALTER PROCEDURE [schema].[usp_ProccessingQueueActivation]
WITH EXECUTE AS CALLER
AS

BEGIN
    SET NOCOUNT ON;

    <snip declaration>
    BEGIN
        BEGIN TRANSACTION;

            WAITFOR
            (
                RECEIVE TOP (1)
                    @ConversationHandle = conversation_handle,
                    @MessageBody = CAST(message_body AS XML),
                    @MessageTypeName = message_type_name
                FROM [schema].[ProccessingQueue]
            ), TIMEOUT 5000;

            <snip …
Run Code Online (Sandbox Code Playgroud)

sql-server ssis service-broker

10
推荐指数
1
解决办法
795
查看次数

是否可以将SignalR消息直接添加到SQL背板?

我想知道是否可以将SignalR消息直接添加到SignalR SQL背板(来自SQL),因此我不必使用SignalR客户端来执行此操作.

我的情况是我有一个SQL Service Broker队列的激活存储过程,当它触发时,我想向SignalR客户端发送一条消息.目前,我必须在单独的进程中从SQL Service Broker接收消息,然后立即使用SignalR集线器重新发送消息.

我希望我的激活存储过程基本上将消息直接移动到SignalR SQL背板上.

sql service-broker signalr signalr-backplane

9
推荐指数
1
解决办法
1055
查看次数

SQL Service Broker作为.net的通用企业消息总线

我需要一个针对发布者/订阅者功能的企业服务总线/消息队列解决方案.我知道MANY存在...... MSMQ,MS系列,RabbitMQ,NServiceBus等等......

我的一个要求是在共享托管解决方案中,我能保证的唯一依赖是SQL 2005及更高版本......这直接导致我直接进入SQL Service Broker.

如果听起来我正试图将ESB功能塞进SSB ......我想我是......

我的问题是:有没有人知道.NET API或框架位于SQL Service Broker之上并且已经提供了大量的管道工程?

如果我使用纯ADO.net,我可以通过调用存储过程将项添加到队列,但是然后:

  1. 根据谈话的性质,我会为每条消息进行一次对话吗?
  2. 如果是这样,我会丢失顺序消息处理吗?
  3. 我如何接收消息(我知道t-SQL中的接收语法),是否在消息循环中重复调用存储过程以尝试从队列中获取消息?
  4. 或者我会等待吗?保持连接打开并永久执行存储过程?
  5. SQL Service Broker不支持独白对话,但我读过它们可以实现...

正是这些问题让我希望现有的.net解决方案已经完成了所有这些工作.

sql-server esb service-broker

8
推荐指数
1
解决办法
2972
查看次数

标签 统计

service-broker ×10

sql-server ×9

.net ×4

queue ×2

sql ×2

c# ×1

caching ×1

esb ×1

msmq ×1

signalr ×1

signalr-backplane ×1

ssis ×1