RabbitMQ - SQL рд╕рд░реНрд╡рд░

рдПрдХ рдпрд╛ рджреЛ рд╣рдлреНрддреЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ RabbitMQ Users рдлреЛрд░рдо рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рджреЗрдЦрд╛ рдХрд┐ SQL Server рд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ RabbitMQ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЪреВрдВрдХрд┐ рд╣рдо рдбреЗрд░рд┐рд╡рдХреЛ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡рд╣рд╛рдВ рдХреБрдЫ рд╕реБрдЭрд╛рд╡ рдЫреЛрдбрд╝ рджрд┐рдП, рдФрд░ рдпрд╣ рднреА рдХрд╣рд╛ рдХрд┐ рдореИрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмреНрд▓реЙрдЧ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░реЗ рд╕рдВрджреЗрд╢ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рдерд╛ - рдХрдо рд╕реЗ рдХрдо рдЙрд╕ рдХреНрд╖рдг рддрдХ (рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рднрд╛рдИ, рд╡рд╣ рдмрд╣реБрдд рд╡реНрдпрд╕реНрдд рдерд╛)ред

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рдмрд╛рдд рд╣реИ, рдпрд╣ рдЖрдкрдХрд╛ SQL рд╕рд░реНрд╡рд░ рд╣реИ ред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдбрд╛рд▓рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЙрддрдирд╛ рд╣реА рдЖрд╕рд╛рди рд╣реИред рд▓реЗрдХрд┐рди рдЕрднреА рдЕрджреНрдпрддрди рдпрд╛ рдЪрд┐рдкрдХрд╛рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЛ; рдЦрд░реАрджрд╛рд░реА рдХреА рдЬрд╛рддреА рд╣реИ - рдЬреИрд╕реЗ рд╣реА рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╢рд╛рдпрдж рдХреЛрдИ рдХрд╣реЗрдЧрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдкреЙрдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдХрд╣реАрдВ рдФрд░ рд╕реЗред рдмреЗрд╢рдХ, рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдп рдерд╛: рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреЗрдЬреЗрдВ, рдФрд░ рд╕рд╡рд╛рд▓ рдерд╛ - рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ?

SQL рд╕рд░реНрд╡рд░ рдФрд░ рдмрд╛рд╣рд░реА рд╕рдВрдЪрд╛рд░


SQL рд╕рд░реНрд╡рд░ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рджреМрд░рд╛рди, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдмрд╛рд╣рд░ рд╕рдВрдЪрд╛рд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдП рдЧрдП рд╣реИрдВ; SQL рд╕рд░реНрд╡рд░ рд╕реВрдЪрдирд╛ рд╕реЗрд╡рд╛ (NS), рдЬреЛ SQL Server 2000 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреА, рдФрд░ рдмрд╛рдж рдореЗрдВ, SQL Server 2005 рдореЗрдВ, SQL рд╕рд░реНрд╡рд░ рд╕реЗрд╡рд╛ рдмреНрд░реЛрдХрд░ (SSB) рджрд┐рдЦрд╛рдИ рджреАред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдмреЙрдм рдмреЙрд╢реЗрдореЗрди рдФрд░ рдбреИрди рд╕реБрд▓рд┐рд╡рди рдХреЗ рд╕рд╛рде рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд░реНрд╡рд░ 2005 рдореЗрдВ рдЕрдкрдиреА рдкреБрд╕реНрддрдХ рдП рдлрд░реНрд╕реНрдЯ рд▓реБрдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ред NS SQL Server 2000 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ рдерд╛, рдФрд░ SQL Server 2005 рдХреЗ рдмреАрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреБрди: рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, NS рдХреЛ SQL Server 2005 рдХреЗ рд░реЗрдбреА-рдлреЙрд░-рд╕реЗрд▓ (RTM) рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред
рдиреЛрдЯ: рдпрджрд┐ рдЖрдк рдкреБрд╕реНрддрдХ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╡рд╣рд╛рдБ рдХрдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдорд┐рд▓реЗрдВрдЧреА рдЬреЛ RTM рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдирд╣реАрдВ рдереАрдВред
SSB рдмрдЪ рдЧрдпрд╛, рдФрд░ Microsoft рдиреЗ рдЕрдкрдиреЗ SQL Server 2008 рдлрд╝реАрдЪрд░ рдкреИрдХ рдореЗрдВ рд╕рд░реНрд╡рд┐рд╕ рдмреНрд░реЛрдХрд░ рдПрдХреНрд╕рдЯрд░реНрдирд▓ рдПрдХреНрдЯреАрд╡реЗрдЯрд░ (EA) рдкреЗрд╢ рдХрд┐рдпрд╛ред рдпрд╣ рдПрд╕рдПрд╕рдмреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдмрд╛рд╣рд░ рдмрд╛рддрдЪреАрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ - рдпрд╣ рдмреЛрдЭрд┐рд▓ рдФрд░ рднреНрд░рдорд┐рдд рд╣реИред рд╣рдордиреЗ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, SSB рдиреЗ рд╣рдореЗрдВ рд╡рд╣ рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХреБрдЫ рдФрд░ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдирд╛ рдерд╛ред

SQLCLR


рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо SQLCLR рддрдХрдиреАрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдереЗред SQLCLR рдПрдХ .NET рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реИ рдЬреЛ SQL Server рдХреЛрд░ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реНрдиреЗрд▓ рдХреЗ рдЕрдВрджрд░ .NET рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдо .NET рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рдирд┐рдпрдорд┐рдд .NET рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред
рдиреЛрдЯ: рдореИрдВрдиреЗ рдКрдкрд░ "рд▓рдЧрднрдЧ" рд▓рд┐рдЦрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рд╕реАрдорд╛рдПрдВ рд╣реИрдВред рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдЗрди рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХрд╛ рд▓рдЧрднрдЧ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
SQLCLR рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдХреЛрдб рдПрдХ dll рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА SQL рд╕рд░реНрд╡рд░ рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрдВрдЬреАрдХреГрдд рд╣реИ:

рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг

CREATE ASSEMBLY [RabbitMQ.SqlServer] AUTHORIZATION rmq FROM 'F:\some_path\RabbitMQSqlClr4.dll' WITH PERMISSION_SET = UNSAFE; GO 

рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ 1: рдПрдмреНрд╕реЛрд▓реНрдпреВрдЯ рдкрд╛рде рдХреЗ рд╕рд╛рде рдЕрд╕реЗрдВрдмрд▓реА рдмрдирд╛рдирд╛

рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддрд╛ рд╣реИ:

  • CREATE ASSEMBLY - рджрд┐рдП рдЧрдП рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдмрдирд╛рддрд╛ рд╣реИ (рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред
  • AUTHORIZATION - рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдорд╛рд▓рд┐рдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, rmq рдПрдХ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд SQL рд╕рд░реНрд╡рд░ рднреВрдорд┐рдХрд╛ рд╣реИред
  • FROM - рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореВрд▓ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реИред FROM , рдЖрдк рдмрд╛рдЗрдирд░реА рдпрд╛ UNC рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдкрде рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рд╖реНрдард╛рдкрди рдлрд╛рдЗрд▓реЗрдВ рдПрдХ рдмрд╛рдЗрдирд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред
  • WITH PERMISSION_SET - рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред UNSAFE рдХрдо рдХрдареЛрд░ рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдиреЛрдЯ: AUTHORIZATION рдХреНрд▓реЙрдЬ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЧрдИ рднреВрдорд┐рдХрд╛ рдпрд╛ рд▓реЙрдЧрд┐рди рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдЕрдкрдбреЛрдореИрди рдХреНрд▓рд╛рд╕ рдХреЛ рдЙрд╕реА рдирд╛рдо рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдм рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реЛред рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ рддрд╛рдХрд┐ рдЬрдм рдПрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдП, рддреЛ рдмрд╛рдХреА рди рдЧрд┐рд░реЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЕрд╕реЗрдВрдмрд▓реА рдПрдХ-рджреВрд╕рд░реЗ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЬрдм рдЕрд╕реЗрдВрдмрд▓реА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рд╣рдо рдЗрд╕рдореЗрдВ .NET рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реИрдкрд░ рдмрдирд╛рддреЗ рд╣реИрдВ:

 CREATE PROCEDURE rmq.pr_clr_PostRabbitMsg @EndpointID int, @Message nvarchar(max) AS EXTERNAL NAME [RabbitMQ.SqlServer].[RabbitMQSqlClr.RabbitMQSqlServer].[pr_clr_PostRabbitMsg]; GO 

рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ 2: .NET рд╡рд┐рдзрд┐ рдЖрд╡рд░рдг

рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддрд╛ рд╣реИ:

  • rmq.pr_clr_PostRabbitMsg рдирд╛рдо рдХреА рдПрдХ T-SQL рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд╛рд░реНрдпрд╡рд┐рдзрд┐ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ; @EndpointID рдФрд░ @Message ред
  • рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╢рд░реАрд░ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдмрд╛рд╣рд░реА рд╕реНрд░реЛрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
    • RabbitMQ.SqlServer рдирд╛рдо рдХрд╛ рдПрдХ рдЕрд╕реЗрдВрдмрд▓реА, рдпрд╛рдиреА рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдЬреЛ рд╣рдордиреЗ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ 1 рдореЗрдВ рдмрдирд╛рдпрд╛ рд╣реИред
    • рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░ (рдирд╛рдо рд╕реНрдерд╛рди рдФрд░ рд╡рд░реНрдЧ): RabbitMQSqlClr.RabbitMQSqlServer
    • рдЙрдкрд░реЛрдХреНрдд рдирд╛рдорд╕реНрдерд╛рди рдФрд░ рд╡рд░реНрдЧ рдХреА рд╡рд┐рдзрд┐ рд╣реИ: pr_clr_PostRabbitMsg ред

рдЬрдм rmq.pr_clr_PostRabbitMsg рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ pr_clr_PostRabbitMsg рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдиреЛрдЯ: рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рддреЗ рд╕рдордп, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдирд╛рдо рдЯрд╛рдЗрдк рдФрд░ рд╡рд┐рдзрд┐ рдХреЗ рдкреВрд░реНрдг рдирд╛рдо рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмрдирд╛рдИ рдЬрд╛ рд░рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдирд╛рдо рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реЛред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛, рд╣рдо рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд░реНрд╡рд░ рдХреЗ рдмрд╛рд╣рд░ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХреА рдЬрд░реВрд░рдд рд╣реИ, рддреЛ рд╣рдо SQLCLR рдФрд░ рдкреНрд░рдпреЛрдЧ Derivco рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ RabbitMQ (RMQ)ред

RabbitMQ


RMQ рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдореИрд╕реЗрдЬ рдмреНрд░реЛрдХрд░ рд╣реИ рдЬреЛ рдПрдбрд╡рд╛рдВрд╕реНрдб рдореИрд╕реЗрдЬ рдХреНрдпреВрдЗрдВрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (AMQP) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрд░реНрд▓рд╛рдВрдЧ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреНрдпреЛрдВрдХрд┐ RMQ рдПрдХ рдореИрд╕реЗрдЬ рдмреНрд░реЛрдХрд░ рд╣реИ, рдЗрд╕рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП AMQP рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд▓рд╛рдЗрдВрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░, рдЙрдирдХреА рдорджрдж рд╕реЗ, рдПрдХ рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓рддрд╛ рд╣реИ рдФрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, SQL рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП ADO.NET рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдХреЙрд▓ рд╣реИред рд▓реЗрдХрд┐рди ADO.NET рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд╣рд╛рдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдХрдиреЗрдХреНрд╢рди рд╣рд░ рдмрд╛рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдЦреБрд▓рддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рдХрдиреЗрдХреНрд╢рди рдЖрд╡реЗрджрди рдХреА рдкреВрд░реА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд░рд╣рддрд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, RabbitMQ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ RabbitMQ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ .NET рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдиреЛрдЯ: рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, RabbitMQ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдорд┐рд▓реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡реЗ рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреА рд╡рд┐рд╕реНрддреГрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рдмрд┐рдирд╛ред рдпрджрд┐ рдЖрдк RabbitMQ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рд╣реИрдВ, рддреЛ рдореИрдВ рдХреЛрдб рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди RabbitMQ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб C # рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдПрдХ рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд рд╣реИред рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХреЛрдВ рдФрд░ рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░реНрд╕ рдХреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

RabbitMQ.SqlServer


RabbitMQ.SqlServer рдПрдХ рдЕрд╕реЗрдВрдмрд▓реА рд╣реИ рдЬреЛ RabbitMQ рдХреЗ рд▓рд┐рдП .NET рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ RabbitMQ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ (VHosts рдФрд░ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░реНрд╕) рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдХреЛрдб рдХреЛ GitHub рдкрд░ рдореЗрд░реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА RabbitMQ-SqlServer рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб / рдХрд╛рдВрдЯрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓реА рд╕реЛрд░реНрд╕ рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдлрд╛рдЗрд▓реНрд╕ рд╣реИрдВ (рдпрд╛рдиреА рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдЦреБрдж рдХрдВрдкрд╛рдЗрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ)ред
рдиреЛрдЯ: рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ SQL рд╕рд░реНрд╡рд░ RabbitMQ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрд╣ рдПрдХ рддреИрдпрд╛рд░ рдЙрддреНрдкрд╛рдж рдпрд╛ рдЗрд╕рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рднреА рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдпрд╣ рдХреЛрдб рдЖрдкрдХреЗ рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ - рдореБрдЭреЗ рджреЛрд╖ рди рджреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред

рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛


рдЬрдм рдЕрд╕реЗрдВрдмрд▓реА рд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИ, рдпрд╛ рдЬрдм рдЗрд╕рдХреЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдЬрдм рдЗрд╕реЗ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕ рд╕рдордп рдЖрд╡рд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд╕реЗрдВрдмрд▓реА рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓реЛрдб рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдпрд╣ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП RabbMM рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рднреА:

рд╕рдВрдмрдВрдз

 internal bool InternalConnect() { try { connFactory = new ConnectionFactory(); connFactory.Uri = connString; connFactory.AutomaticRecoveryEnabled = true; connFactory.TopologyRecoveryEnabled = true; RabbitConn = connFactory.CreateConnection(); for (int x = 0; x < channels; x++) { var ch = RabbitConn.CreateModel(); rabbitChannels.Push(ch); } return true; } catch(Exception ex) { return false; } } 

рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ 3: рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ

рдЙрд╕реА рд╕рдордп, рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рднреА рдХрдиреЗрдХреНрд╢рди рдкрд░ IModels рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ (рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рдХрд░) рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛

 internal bool Post(string exchange, byte[] msg, string topic) { IModel value = null; int channelTryCount = 0; try { while ((!rabbitChannels.TryPop(out value)) && channelTryCount < 100) { channelTryCount += 1; Thread.Sleep(50); } if (channelTryCount == 100) { var errMsg = $"Channel pool blocked when trying to post message to Exchange: {exchange}."; throw new ApplicationException(errMsg); } value.BasicPublish(exchange, topic, false, null, msg); rabbitChannels.Push(value); return true; } catch (Exception ex) { if (value != null) { _rabbitChannels.Push(value); } throw; } } 

Post рд╡рд┐рдзрд┐ рдХреЛ pr_clr_PostRabbitMsg(int endPointId, string msgToPost) рд╡рд┐рдзрд┐ pr_clr_PostRabbitMsg(int endPointId, string msgToPost) рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдХреЛрдб 2 рдореЗрдВ pr_clr_PostRabbitMsg(int endPointId, string msgToPost) CREATE PROCEDURE рдЦрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдкреЛрд╕реНрдЯ рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐

 public static void pr_clr_PostRabbitMsg(int endPointId, string msgToPost) { try { if(endPointId == 0) { throw new ApplicationException("EndpointId cannot be 0"); } if (!isInitialised) { pr_clr_InitialiseRabbitMq(); } var msg = Encoding.UTF8.GetBytes(msgToPost); if (endPointId == -1) { foreach (var rep in remoteEndpoints) { var exch = rep.Value.Exchange; var topic = rep.Value.RoutingKey; foreach (var pub in rabbitPublishers.Values) { pub.Post(exch, msg, topic); } } } else { RabbitPublisher pub; if (rabbitPublishers.TryGetValue(endPointId, out pub)) { pub.Post(remoteEndpoints[endPointId].Exchange, msg, remoteEndpoints[endPointId].RoutingKey); } else { throw new ApplicationException($"EndpointId: {endPointId}, does not exist"); } } } catch { throw; } } 

рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ 5: рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдирд╛

рдЬрдм рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдВрджреЗрд╢ рд╕реНрд╡рдпрдВред рдпрджрд┐ рдорд╛рди -1 рдХреЛ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВред рдПрдХ рд╕рдВрджреЗрд╢ рдПрдХ рд▓рд╛рдЗрди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдо рдкреНрд░рдпреЛрдЧ рдХрд░ рдмрд╛рдЗрдЯреНрд╕ рдорд┐рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрддрд╛ рд╣реИ Encoding.UTF8.GetBytes ред рдПрдХ рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, Encoding.UTF8.GetBytes рдХреЙрд▓ рдХреЛ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реНрдерд╛рдкрдирд╛


рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ src\SQL рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:

  • рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдПрдБ 01.create_database_and_role.sql ред рд╡рд╣ рдмрдирд╛рдПрдВрдЧреЗ:
    • RabbitMQTest рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛рдмреЗрд╕ рдЬрд╣рд╛рдБ рдЕрд╕реЗрдВрдмрд▓реА рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред
    • rmq рднреВрдорд┐рдХрд╛ рдХреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдорд╛рд▓рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реМрдВрдкрд╛ рдЬрд╛рдПрдЧрд╛
    • рдпреЛрдЬрдирд╛, рдЬрд┐рд╕реЗ rmq рднреА рдХрд╣рд╛ rmq ред рдЗрд╕ рдЖрд░реЗрдЦ рдореЗрдВ, рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

  • 02.create_database_objects.sql рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдПрдБред рд╡рд╣ рдмрдирд╛рдПрдВрдЧреЗ:

    • rmq.tb_RabbitSetting рддрд╛рд▓рд┐рдХрд╛, рдЬреЛ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧреАред
    • rmq.tb_RabbitEndpoint рдЯреЗрдмрд▓, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ RabbitMQ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрдВрдЧреЗред

  • 03.create_localhost_connstring.sql рдлрд╝рд╛рдЗрд▓ рдореЗрдВ 03.create_localhost_connstring.sql рдЪрд░рдг 1 рдореЗрдВ рдирд┐рд░реНрдорд┐рдд RabbitMQTest рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП @connString рдЪрд░ рдХрд╛ рдорд╛рди рдмрджрд▓реЗрдВ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБред

рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЗ рдкрд╛рд╕ RabbitMQ рдмреНрд░реЛрдХрд░ рдХрд╛ рдПрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ VHost (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, VHost рдХреЛ / рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ VHost рд╣реИрдВ, рдмрд╕ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рдореЗрдЬрдмрд╛рди рдХреЛ рднреА рдПрдХ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдо amq.topic рдЙрдкрдпреЛрдЧ amq.topic ред рдЬрдм рдЖрдкрдХрд╛ RabbitMQ рдмреНрд░реЛрдХрд░ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ rmq.pr_UpsertRabbitEndpoint рдкреНрд░рдХреНрд░рд┐рдпрд╛ rmq.pr_UpsertRabbitEndpoint рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдЬреЛ 04.upsert_rabbit_endpoint.sql рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ:

рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ RabbitMQ

 EXEC rmq.pr_UpsertRabbitEndpoint @Alias = 'rabbitEp1', @ServerName = 'RabbitServer', @Port = 5672, @VHost = 'testHost', @LoginName = 'rabbitAdmin', @LoginPassword = 'some_secret_password', @Exchange = 'amq.topic', @RoutingKey = '#', @ConnectionChannels = 5, @IsEnabled = 1 

рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ 6: рд░реИрдмрд┐рдЯрдХреНрдпреВ рдореЗрдВ рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрдирд╛рдирд╛

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдпрд╣ рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред SQL рд╕рд░реНрд╡рд░ 2014 (2005, 2008, 2008R2, 2012) рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ 2014 рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд▓рд┐рдП SQL рд╕рд░реНрд╡рд░ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рдЕрдВрддрд░ рд╣реИрдВред рдЕрдВрддрд░ рд╕реАрдПрд▓рдЖрд░ рдХреЗ рд╕рдорд░реНрдерд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред SQL рд╕рд░реНрд╡рд░ 2014 рд╕реЗ рдкрд╣рд▓реЗ, .NET рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо CLR рд╕рдВрд╕реНрдХрд░рдг 2 рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рдерд╛, рдФрд░ SQL рд╕рд░реНрд╡рд░ 2014 рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╕рдВрд╕реНрдХрд░рдг 4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

SQL рд╕рд░реНрд╡рд░ 2005 - 2012


рдЪрд▓реЛ SQL рд╕рд░реНрд╡рд░ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ CLR 2 рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреА рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рд╣рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЙрд╕реА рд╕рдордп RabbitMQ рдХреНрд▓рд╛рдЗрдВрдЯ .NET рд▓рд╛рдЗрдмреНрд░реЗрд░реА ( RabbitMQ.Client ) рдХреЛ рддреИрдирд╛рдд рдХрд░реЗрдВред рд╣рдорд╛рд░реА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗ рд╣рдо рд░реИрдмрд┐рдЯрдПрдордХреНрдпреВ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВрдЧреЗред рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдБрдХрд┐ рд╣рдордиреЗ CLR 2, рд╣рдорд╛рд░реА рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ RabbitMQ.Client рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рд╣реИред рдЗрд╕реЗ .NET 3.5 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред

RabbitMQ.Client рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рднреА рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг CLR 4 рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рд╣рдорд╛рд░реЗ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред CLR 2 рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг .NET 3.4.3 рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрджрд┐ рд╣рдо рдЗрд╕ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИ:


рдЪрд┐рддреНрд░ 1: рдорд┐рд╕рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдоред ServiceModel рдЕрд╕реЗрдВрдмрд▓реА

RabbitMQ.Client рдХрд╛ рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг SQL рд╕рд░реНрд╡рд░ CLR рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ WCF рдЕрд╕реЗрдВрдмрд▓реА рд╣реИ, рдФрд░ рдпрд╣ SQLCLR рдХреА рдЙрди рд╕реАрдорд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬрд┐рдирдХрд╛ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ: рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдЕрд╕реЗрдВрдмрд▓реА рдЙрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрддреА рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ SQL Server рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред RabbitMQ.Client рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдпреЗ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ CLR рдХреА рдХрд╖реНрдЯрдкреНрд░рдж рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд┐рд╕реА рднреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, RabbitMQ рдПрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╣реИрдВ, рд╣реИ рдирд╛? ;) рддреЛ рдЪрд▓реЛ recompile! RabbitMQ.Client рдХреЗ рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬрд╝ (рдпрд╛рдиреА рд╕рдВрд╕реНрдХрд░рдг <3.5.0) рд╕реЗ рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ RabbitMQ.Client рдореИрдВрдиреЗ System.ServiceModel рдХреЗ рд▓рд┐рдВрдХ рд╣рдЯрд╛ рджрд┐рдП рдФрд░ рдкреБрди: рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд▓рд┐рдпрд╛ред рдореБрдЭреЗ System.ServiceModel рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпреЗ рдорд╛рдореВрд▓реА рдкрд░рд┐рд╡рд░реНрддрди рдереЗред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рдВрд╕реНрдХрд░рдг 3.4.3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╕реНрдерд┐рд░ рд░рд┐рд▓реАрдЬ 3.6.6 рд▓рд┐рдпрд╛ рдФрд░ .NET 3.5 (рд╕реАрдПрд▓рдЖрд░ 2) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрди: рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ ред рдЗрд╕рдиреЗ рд▓рдЧрднрдЧ рдХрд╛рдо рдХрд┐рдпрд╛ :), рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдмрд╛рдж рдореЗрдВ RabbitMQ.Client Task 'рдХрд╛ рд╡рд┐рдореЛрдЪрди рд╣реБрдЖ рдФрд░ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ .NET 3.5 рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВред

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, .NET 3.5 рдХреЗ рд▓рд┐рдП System.Threading.dll рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ Task рд╢рд╛рдорд┐рд▓ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛, рд▓рд┐рдВрдХ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдФрд░ рд╕рдм рдХреБрдЫ рдЪрд▓рд╛ рдЧрдпрд╛! рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдЪрд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ System.Threading.dll рдХреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдиреЛрдЯ: рд╕реНрд░реЛрдд RabbitMQ.Client , рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдореИрдВ .NET 3.5 рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХрддреНрд░ рд╣реБрдП, рд╡рд╣рд╛рдБ GitHub рдкрд░ рдореЗрд░реА рдЦрдЬрд╛рдиреЗ рдореЗрдВ рд╣реИ RabbitMQ 3.6.6 рдХреНрд▓рд╛рдЗрдВрдЯ .NET 3.5 ред .NET 3.5 рдХреЗ рд▓рд┐рдП System.Threading.dll рдХреЗ рд╕рд╛рде dll рдмрд╛рдЗрдирд░реА рднреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА (RabbitMQ-SqlServer) рдХреЗ lib\NET3.5 рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред
рдЖрд╡рд╢реНрдпрдХ рдЕрд╕реЗрдВрдмрд▓реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ( System.Threading , RabbitMQ.Client рдФрд░ RabbitMQ.SqlServer ) рдирд┐рдореНрди рдХреНрд░рдо рдореЗрдВ src\sql рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд╕рдВрд╕реНрдерд╛рдкрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБ:

  1. 05.51.System.Threading.sql2k5-12.sql - System.Threading
  2. 05.52.RabbitMQ.Client.sql2k5-12.sql - 05.52.RabbitMQ.Client.sql2k5-12.sql
  3. 05.53.RabbitMQ.SqlServer.sql2k5-12.sql - RabbitMQ.SqlServer

SQL рд╕рд░реНрд╡рд░ 2014+


SQL рд╕рд░реНрд╡рд░ 2014 рдФрд░ рдмрд╛рдж рдореЗрдВ, рдЕрд╕реЗрдВрдмрд▓реА .NET 4.XX рдХреЗ рддрд╣рдд рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдореЗрд░рд╛ рдЙрджрд╛рд╣рд░рдг 4.5.2 рдкрд░ рд╣реИ), рдФрд░ рдЖрдк RabbitMQ.Client рдХрд┐рд╕реА рднреА рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ NuGet рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ 4.1.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред RabbitMQ.Client , рдЬреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА (RabbitMQ-SqlServer) рдХреЗ lib\NET4 рд╣реИ ред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рдо рдореЗрдВ src\sql рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП:

  1. 05.141.RabbitMQ.Client.sql2k14+.sql - RabbitMQ.Client
  2. 05.142.RabbitMQ.SqlServer.sql2k14+.sql - 05.142.RabbitMQ.SqlServer.sql2k14+.sql

рдПрд╕рдХреНрдпреВрдПрд▓ рд╡рд┐рдзрд┐ рдЖрд╡рд░рдг


рд╣рдорд╛рд░реА рдЕрд╕реЗрдВрдмрд▓реА (3.5 рдпрд╛ 4) рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░рд┐рдкреНрдЯ 06.create_sqlclr_procedures.sql ред рд╡рд╣ рддреАрди .NET рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреА-рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдмрдирд╛рдПрдЧрд╛:

  • rmq.pr_clr_InitialiseRabbitMq рдХреЙрд▓ pr_clr_InitialiseRabbitMq ред RabbitMQ.SqlServer рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд▓реЛрдб рдФрд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • rmq.pr_clr_ReloadRabbitEndpoints рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ pr_clr_ReloadRabbitEndpoints ред рд╡рд┐рднрд┐рдиреНрди RabbitMQ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред
  • rmq.pr_clr_PostRabbitMsg рдХрд╣рддрд╛ рд╣реИред RabbitMQ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рд╕рд╛рдзрд╛рд░рдг T-SQL рдкреНрд░рдХреНрд░рд┐рдпрд╛ рднреА рдмрдирд╛рддреА рд╣реИ - rmq.pr_PostRabbitMsg , рдЬреЛ rmq.pr_clr_PostRabbitMsg рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред рдпрд╣ рдПрдХ рдЖрд╡рд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬреЛ рдЬрд╛рдирддреА рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЖрджрд┐ред рдЙрддреНрдкрд╛рджрди рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рд╕рдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рдкрдврд╝реЗрдВред

рдХреЗ рдЙрдкрдпреЛрдЧ


рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╕реЗ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ RabbitMQ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо rmq.pr_PostRabbitMsg рдпрд╛ rmq.pr_clr_PostRabbitMsg рдХреЙрд▓ rmq.pr_clr_PostRabbitMsg , рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рд╕рдВрджреЗрд╢ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдм, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╢рд╛рдВрдд рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рд╣рдо рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЬреЛ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд╛рд░реНрдпрд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ RabbitMQ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рдо рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдмреНрд▓реЙрдХ рдореЗрдВ рд╣рдо rmq.pr_PostRabbitMsg рдЬреИрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ rmq.pr_PostRabbitMsg ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрд╕ рддрд░рд╣ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

рдбрд╛рдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛

 ALTER PROCEDURE dbo.pr_SomeProcessingStuff @id int AS BEGIN SET NOCOUNT ON; BEGIN TRY --     DECLARE @endPointId int; --    DECLARE @msg nvarchar(max) = '{' --        SET @msg = @msg + '"Id":' + CAST(@id AS varchar(10)) + ',' --  -  SET @msg = @msg + '"FName":"Hello",'; SET @msg = @msg + '"LName":"World"'; SET @msg = @msg + '}'; -- -  --     -,  -  SELECT @endPointId = 1; --    --     EXEC rmq.pr_PostRabbitMsg @Message = @msg, @EndpointID = @endPointId; END TRY BEGIN CATCH DECLARE @errMsg nvarchar(max); DECLARE @errLine int; SELECT @errMsg = ERROR_MESSAGE(), @errLine = ERROR_LINE(); RAISERROR('Error: %s at line: %d', 16, -1, @errMsg, @errLine); END CATCH END 

рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ 7 рдореЗрдВ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, src\SQL рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ 07.create_processing_procedure.sql рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБред

рдЪрд▓реЛ рдЗрд╕реЗ рд╕рдм рдЪрд▓рд╛рддреЗ рд╣реИрдВ


рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдЖрдкрдХреЛ рдХреБрдЫ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ rmq.tb_RabbitEndpoint рдореЗрдВ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рд╕реЗ рдЬреБрдбрд╝реЗ RabbitMQ рдореЗрдВ rmq.tb_RabbitEndpoint ред

рддреЛ, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
99.test_send_message.sql рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВред
рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ

 EXEC rmq.pr_clr_InitialiseRabbitMq; 

рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ RabbitMQ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд▓реЛрдб рдХрд░реЗрдВ рдпрд╣ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдХрджрдо рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдпрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рд▓реЛрдб рдХрд░реЗрдВред

рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ

 EXEC dbo.pr_SomeProcessingStuff @id = 101 

(рдЖрдк рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдпрджрд┐ рд╕рдм рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдХ рд╕рдВрджреЗрд╢ RabbitMQ рдХрддрд╛рд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП! рдЗрд╕рд▓рд┐рдП рдЖрдкрдиреЗ RabCLMQ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП SQLCLR рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

Kongratuleyshens!

Source: https://habr.com/ru/post/hi419457/


All Articles