3 MSMQ消息队列... 2
目录
1 大致思路... 1
2 Nginx集群之WCF布满式新闻队列... 1
3 MSMQ新闻队列... 2
4 编写WCF服务、客商端程序... 2
5 服务器安装MSMQ.. 5
6 安插WCF服务程序到局域网内1台PC机... 6
7 Nginx集群配置搭建... 7
8 运维结果... 8
9 总结... 11
3 MSMQ消息队列... 2。1 大约思路
l Nginx集群之WCF布满式音讯队列
3 MSMQ消息队列... 2。3 MSMQ消息队列... 2。l MSMQ新闻队列
3 MSMQ消息队列... 2。l 编写WCF服务、顾客端程序
l 服务器安装MSMQ
l 计划WCF服务程序到局域网内1台PC机
l Nginx集群配置搭建
l 运营结果
l 总结
2 Nginx集群之WCF布满式音讯队列
针对WCF布满式音讯队列MSMQ大大升高了管理手艺,无论是发送方依然接收方都不用等待对方回来成功新闻,不过不适合Client与Server端的实时互动。WCF布满式新闻队列,在拍卖日志方面,效果还是很明朗的。
3 MSMQ消息队列... 2。本来,针对音讯队列的管理才能,有非常多种,举例:ActiveMQ、RabbitMQ、ZeroMQ、卡夫卡、MetaMQ、罗克etMQ。本文使用的是微软自带的新闻队列MSMQ,结合WCF在Ningx集群的情形下,创设一个看似日志型或邮件型的WCF服务。
以下是WCF遍布式消息队列的架构:
3 MSMQ消息队列
音讯队列MSMQ提供更加高顺序的非连接通讯帮忙,因为它扶助离线通讯形式。音信的发送者在离线情势下进行,离线通信情势让举行音信调换的插手者产生完全部独用立的多个利用,它们中间唯一的关键正是新闻队列。
若果依据MSMQ提供的通讯格局,无论出现多高的负载,只要达到的新闻储存量不超越设定的限额,MSMQ就完全能够根据本人的旋律来进行拍卖。将高负荷的央求延后到低负载的时候进行管理,很好地解决了负荷上面包车型地铁主题材料。
MSMQ中根本有多个概念。
三个是音信Message:Message是通讯双方须求传递的新闻,它能够是文本、图片、录制等。消息包含发送和接收者的标志,唯有钦点的顾客本事取得音讯。
队列 |
描述 |
公共队列 |
在整个消息队列网络中复制,有可能由网络连接的所有站点访问 |
专用队列 |
不在整个网络中发布,它们仅在所驻留的本地计算机上可用,专用队列只能由知道队列的完整路径名称或标签的应用程序访问 |
日志队列 |
包含确认在给定“消息队列中发送的消息回执消息” |
响应队列 |
包含目标应用程序接收到消息时返回给发送应用程序的响应消息,包括机器日志队列、机器死信队列和机器事务死信队列 |
4 编写WCF服务、顾客端程序
l WCF服务程序
Program.cs
using Service;
using System;
using System.ServiceModel;
namespace MessageDealingHosting
{
class Program
{
static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(PublicMessageQueue)))
{
host.Opened += delegate
{
Console.WriteLine(host.Description.Endpoints[0].Address.Uri + "已经启动,按任意键终止服务!");
};
host.Open();
Console.Read();
}
}
}
}
PublicMessageQueue.cs
using System;
using Service.Interface;
namespace Service
{
public partial class PublicMessageQueue : IPublicMessageQueue
{
public void SendMessage(string msg)
{
Console.WriteLine(string.Format("消息队列开始处理,输入{0}成功", msg));
}
}
}
IPublicMessageQueue.cs
using System;
using Service.Interface;
namespace Service
{
public partial class PublicMessageQueue : IPublicMessageQueue
{
public void SendMessage(string msg)
{
Console.WriteLine(string.Format("消息队列开始处理,输入{0}成功", msg));
}
}
}
服务端配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MessageQueueBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<netMsmqBinding>
<binding name="MessageQueueBinding" exactlyOnce="false">
<security mode="None"></security>
</binding>
</netMsmqBinding>
</bindings>
<services>
<service behaviorConfiguration="MessageQueueBehavior" name="Service.PublicMessageQueue">
<endpoint address="net.msmq://10.92.202.56/private/wcf_message" binding="netMsmqBinding" bindingConfiguration="MessageQueueBinding"
contract="Service.Interface.IPublicMessageQueue" />
<host>
<baseAddresses>
<add baseAddress="http:// 10.92.202.56:5600/wcf_message" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
l 客商端程序
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MessageDealingClient.MessageDealingService;
using System.ServiceModel;
namespace MessageDealingClient
{
class Program
{
static void Main(string[] args)
{
using (ChannelFactory<IPublicMessageQueue> channelFactory = new ChannelFactory<IPublicMessageQueue>("NetMsmqBinding_IPublicMessageQueue"))
{
IPublicMessageQueue proxyServer = channelFactory.CreateChannel();
proxyServer.SendMessage("hello world");
Console.WriteLine("客户端先启动,将消息传到消息队列,若WCF服务启动,则会输出hello world");
}
Console.Read();
}
}
}
顾客端配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<netMsmqBinding>
<binding name="NetMsmqBinding_IPublicMessageQueue" exactlyOnce="false">
<security mode="None" />
</binding>
</netMsmqBinding>
</bindings>
<client>
<endpoint address="net.msmq://10.92.202.56/private/wcf_message"
binding="netMsmqBinding" bindingConfiguration="NetMsmqBinding_IPublicMessageQueue"
contract="MessageDealingService.IPublicMessageQueue" name="NetMsmqBinding_IPublicMessageQueue" />
</client>
</system.serviceModel>
</configuration>
5 服务器安装MSMQ
l 张开“调整面板”
l 单击“程序”,然后在“程序和功用”下单击“展开或关闭 Windows 成效
l 进行“Microsoft Message Queue (MSMQ) 服务器”,张开“Microsoft Message Queue (MSMQ) 服务器大旨”,然后选中对应于以下要设置的“音讯队列”功效的复选框
n MSMQ Active Directory 域服务集成(用于参预域的Computer)。
n MSMQ HTTP 支持。
6 安排WCF服务程序到局域网内1台PC机
远程布置WCF服务端程序到PC机
7 Nginx集群配置搭建
经过自己作主义域名zhyongfeng.com:80端口进行负荷均衡集群访谈,则访谈C:WindowsSystem32driversetchosts,增添下列“本机IP 自定义的域名”:
10.93.85.66 zhyongfeng.com
运用Nginx匹配原则针对WCF陈设的1台PC机配置如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream zhyongfeng.com {
server 10.92.202.56:5600;
server 10.92.202.57:5700;
server 10.92.202.58:5800;
}
server {
listen 80;
server_name zhyongfeng.com;
location / {
proxy_pass http://zhyongfeng.com;
proxy_connect_timeout 10s;
}
location /wcf_message{
proxy_pass http://10.92.202.56:5600/wcf_message;
proxy_connect_timeout 10s;
}
}
}
运行CMD:
D:DTLDownLoadsnginx-1.10.2>start nginx
D:DTLDownLoadsnginx-1.10.2>nginx -s reload
访问WCF服务端:
8 运行结果
初叶远程WCF服务端,同时开动WCF顾客端,结果如下:
闭馆远程WCF服务端,运维WCF客商端,结果如下:
再起步WCF服务端,结果如下:
9 总结
传说WCF布满式音信队列,可以在一部分客商端并不必要服务端响应的场馆上采纳。音讯队列在异步管理上有巨大优势,是一项可选拔性的进度间的通讯,能够维持进度之间通讯的安居。
源代码下载:
PDF下载:
Nginx集群之WCF分布式音讯队列.pdf
本文由美高梅游戏发布于银河护卫队图片,转载请注明出处:3 MSMQ消息队列... 2
关键词: