2012-07-18 82 views
1

我正在关注MSDN的Completing a Conversation Between Instances教程。该Lesson 2: Creating the Initiator Database(末)显示,如何在引发位点创建航线(缩短):Service Broker教程 - 一台机器上有两个SQL Server实例。如何路由?

... 
USE InstInitiatorDB; 
CREATE ROUTE InstTargetRoute 
WITH SERVICE_NAME = 
     N'//TgtDB/2InstSample/TargetService', 
    ADDRESS = N'TCP://MyTargetComputer:4022'; 

... 

USE msdb; 
CREATE ROUTE InstInitiatorRoute 
WITH SERVICE_NAME = 
     N'//InstDB/2InstSample/InitiatorService', 
    ADDRESS = N'LOCAL' 

Lesson 3: Completing the Target Conversation Objects确实目标实例相同:

USE InstTargetDB; 
CREATE ROUTE InstInitiatorRoute 
WITH SERVICE_NAME = 
     N'//InstDB/2InstSample/InitiatorService', 
    ADDRESS = N'TCP://MyInitiatorComputer:4022'; 

... 

USE msdb 
CREATE ROUTE InstTargetRoute 
WITH SERVICE_NAME = 
     N'//TgtDB/2InstSample/TargetService', 
    ADDRESS = N'LOCAL'; 

然而,教程假设SQL服务器实例在单独的硬件上运行。如果两台SQL服务器实例在同一台计算机上运行,​​我应该如何更改路由或其他什么?

回答

3

这两个实例不能共享侦听器端口。在第1课,你有这样的:

... 
CREATE ENDPOINT InstTargetEndpoint 
STATE = STARTED 
AS TCP (LISTENER_PORT = 4022) 
... 

和第2课,你有这样的:

... 
CREATE ENDPOINT InstInitiatorEndpoint 
STATE = STARTED 
AS TCP (LISTENER_PORT = 4022) 
... 

既是实例被配置为侦听同一TCP端口上这是行不通的。必须有所不同。让我们使目标监听4023:

... 
CREATE ENDPOINT InstTargetEndpoint 
STATE = STARTED 
AS TCP (LISTENER_PORT = 4023) 
... 

然后从发起到目标的路线具有指定端口现在4023:

... 
CREATE ROUTE InstTargetRoute 
WITH SERVICE_NAME = 
     N''//TgtDB/2InstSample/TargetService'', 
    ADDRESS = N''TCP://MyTargetComputer:4023'';'; 
... 

其他一切保持不变。

+0

如果我理解的很好,那么'4022'就是通常的端口号。有没有建议使用不同的端口?我也见过某处'5022'。我知道4022实际上是按照惯例,并且几乎可以使用任何自由港。但是,什么是好行为? – pepr 2012-07-19 16:52:23

+0

在示例中使用msdb有什么原因吗?那是什么生产环境应该使用? – milez 2016-07-19 11:34:57

+0

@milez请另外提问。 – 2016-07-19 12:01:46

相关问题