当前位置: 首页 > news >正文

淮南品牌网站建设电话湘潭网站建设有名磐石网络

淮南品牌网站建设电话,湘潭网站建设有名磐石网络,医院网站源码 asp,毕节城乡建设局网站查询在上一个教程中#xff0c;我们构建了一个简单的日志系统#xff0c;我们能够向许多消息接受者广播发送日志消息。在本教程中#xff0c;我们将为其添加一项功能 #xff0c;这个功能是我们将只订阅消息的一个子集成为可能。 例如#xff0c;我们可以只将关键的错误消息输…在上一个教程中我们构建了一个简单的日志系统我们能够向许多消息接受者广播发送日志消息。在本教程中我们将为其添加一项功能 这个功能是我们将只订阅消息的一个子集成为可能。 例如我们可以只将关键的错误消息输出到日志文件以节省磁盘空间同时仍然可以在控制台上打印所有日志消息。1、绑定在以前的例子中我们已经创建了绑定。 你可能会记得如下代码 channel.QueueBind(queue: queueName, exchange: logs, routingKey: ); 【绑定】是【消息交换机】和【队列】之间的关系纽带通过绑定把二者关联起来。 这可以简单地理解为队列可以接收来自此【消息交换机】的消息。【绑定】可以占用额外的路由选择参数。 为了避免与BasicPublish参数混淆我们将其称为【绑定键】。 以下代码就是如何用一个键值来创建一个绑定 channel.QueueBind(queue: queueName,exchange: direct_logs,routingKey: black); 【绑定键】的含义取决于交换类型。 以前我们使用的【Fanout】类型的【消息交换机】忽略了它的取值。2、直接交换   在上一个教程中我们的日志记录系统向所有【消费者】发送所有消息。 我们希望将其扩展为允许基于其严重性过滤消息。 例如我们可能希望将写入磁盘日志消息的脚本仅接受严重错误而不会在警告或信息日志消息上浪费磁盘空间。   我们正在使用一个【Fanout】类型的【消息交换机】它不会给我们带来很大的灵活性 - 它只能无意识地发送。   我们将使用一个【Direct】类型的【消息交换机】。 直接转换路由的背后的算法其实是很简单的 - 把消息传递到【绑定键 binding key】和消息的【路由键 routing key】完全匹配的队列中。   为了说明请考虑以下设置 在这个设置中我们可以看到【Direct】类型的【消息交换机】X与两个队列相绑定。 第一个队列与【绑定键】的值是Orange相绑定的第二个队列有两个绑定一个【绑定键】的值是black另一个【绑定键】的值是green。   在这样的设置中发布到具有【路由键】为orange的【消息交换机】的消息将被路由到队列Q1。 具有black或green【路由键】的消息将转到Q2。 所有其他消息将被丢弃。3、多重绑定 使用相同的【绑定键】绑定多个队列是完全合法的。 在我们的示例中我们可以在X和Q1之间添加【绑定键】是black的绑定。 在这种情况下【direct】类型的【消息交换机】将表现得像【Fanout】类型的【消息交换机】并将消息发送到所有匹配的队列。 具有【路由键】是black的消息将传送到Q1和Q2。4、发出日志   我们将发送消息到【Direct】类型的【消息交换机】来替换【fanout】类型的【消息交换机】在我们现在的日志系统将使用此模型。 我们将提供日志严重性作为【路由键】。 这样接收脚本就能够选择想要接收的严重性。 我们首先关注发出日志。   像以前一样我们首先要建立一个【消息交换机】 channel.ExchangeDeclare(exchange: direct_logs, type: direct); 现在我们准备发送消息 var body Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: direct_logs,routingKey: severity,basicProperties: null,body: body); 为了简化事情我们假设“严重性”可以是“信息”“警告”“错误”之一。5、订阅   接收消息将像上一个教程一样工作除了一个例外 - 我们将为每个我们感兴趣的严重性创建一个新的绑定。 var queueName channel.QueueDeclare().QueueName;foreach(var severity in args) {channel.QueueBind(queue: queueName,exchange: direct_logs,routingKey: severity); } 6、整合       以下是EmitLogDirect.cs类的代码 using System; using System.Linq; using RabbitMQ.Client; using System.Text; class EmitLogDirect { public static void Main(string[] args) { var factory new ConnectionFactory() { HostName localhost }; using(var connection factory.CreateConnection()) using(var channel connection.CreateModel()) { channel.ExchangeDeclare(exchange: direct_logs, type: direct); var severity (args.Length 0) ? args[0] : info; var message (args.Length 1) ? string.Join( , args.Skip( 1 ).ToArray()) : Hello World!; var body Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: direct_logs, routingKey: severity, basicProperties: null, body: body); Console.WriteLine( [x] Sent {0}:{1}, severity, message); } Console.WriteLine( Press [enter] to exit.); Console.ReadLine(); } } 以下是ReceiveLogsDirect.cs类的代码 using System; using RabbitMQ.Client; using RabbitMQ.Client.Events; using System.Text; class ReceiveLogsDirect { public static void Main(string[] args) { var factory new ConnectionFactory() { HostName localhost }; using(var connection factory.CreateConnection()) using(var channel connection.CreateModel()) { channel.ExchangeDeclare(exchange: direct_logs, type: direct); var queueName channel.QueueDeclare().QueueName; if(args.Length 1) { Console.Error.WriteLine(Usage: {0} [info] [warning] [error], Environment.GetCommandLineArgs()[0]); Console.WriteLine( Press [enter] to exit.); Console.ReadLine(); Environment.ExitCode 1; return; } foreach(var severity in args) { channel.QueueBind(queue: queueName, exchange: direct_logs, routingKey: severity); } Console.WriteLine( [*] Waiting for messages.); var consumer new EventingBasicConsumer(channel); consumer.Received (model, ea) { var body ea.Body; var message Encoding.UTF8.GetString(body); var routingKey ea.RoutingKey; Console.WriteLine( [x] Received {0}:{1}, routingKey, message); }; channel.BasicConsume(queue: queueName, noAck: true, consumer: consumer); Console.WriteLine( Press [enter] to exit.); Console.ReadLine(); } } } 如果您只想将“警告”和“错误”而不是“信息”保存到文件中只需打开控制台并键入 cd ReceiveLogsDirect dotnet run warning error logs_from_rabbit.log 如果您想查看屏幕上的所有日志消息请打开一个新终端然后执行以下操作 cd ReceiveLogsDirect dotnet run info warning error # [*] Waiting for logs. To exit press CTRLC 而且例如要发出错误日志消息只需键入 cd EmitLogDirect dotnet run error Run. Run. Or it will explode.# [x] Sent error:Run. Run. Or it will explode. 以下是原文地址http://www.rabbitmq.com/tutorials/tutorial-four-dotnet.html 今天这篇文章终于翻译完了整个系列还有几篇没翻译。英文水平有限错误在所难免欢迎大家提出来共同学习。 相关文章RabbitMQ系列教程之一我们从最简单的事情开始Hello WorldRabbitMQ系列教程之二工作队列Work QueuesRabbitMQ系列教程之三发布/订阅Publish/Subscribe如何优雅的使用RabbitMQ.NET 使用 RabbitMQ 图文简介RabbitMQ 高可用集群搭建及电商平台使用经验总结搭建高可用的rabbitmq集群 Mirror Queue 使用C#驱动连接RabbitMQ消息队列应用体验Rabbitmq强大的【优先级队列】之轻松面对现实业务场景原文地址http://www.cnblogs.com/PatrickLiu/p/7095080.html.NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注
http://www.zqtcl.cn/news/26723/

相关文章:

  • 大型网站技术架构 pdfapp怎么制作流程
  • 湖北城市建设职业技术学院教务网站wordpress支持的语言包
  • 张家港做网站的最新网站域名
  • 江苏建设人才无纸化考核网站新网站快速收录
  • 怎么做期货网站孝感网站开发选优搏
  • 易班网站的建设内容asp 网站 内容静态化
  • 邯郸网站制作厂家wordpress搜索用户
  • 新网站建设的流程软件开发模型思维导图
  • 有什么好看的网站资源网站建设支出
  • 服务器512m内存做网站昆山市有没有做网站设计的
  • 绿化面积 建设网站建筑类培训网校排名
  • 青岛网站设计公司哪家好免费空间建网站
  • 东莞清溪网站建设用thinkphp做的网站
  • 买了一台配置强悍的电脑怎么做网站服务器滨州wordpress建站
  • 书店网站建设的设计报告网站桥页怎么找
  • 网站建设技术中心网站开发如何处理兼容性问题
  • 做网站简单还是做app简单简历制作网址
  • 网站底部备案东营网手机版
  • 网站大事记时间轴折叠北京网站模板建设
  • 网站建设有云端吗域名解析二级域名
  • 如何给公司做自己的网站北京招聘网站排行
  • 网站开发技术总结报告深圳人才引进入户申请官网
  • 网站换模板对seo贵阳网站方舟网络最好
  • 电脑游戏网站平台大全一般网站用什么数据库
  • 自己怎么手机做网站wordpress 注册钩子
  • 网站建设的题目零配件加工东莞网站建设技术支持
  • 采购需求网站建设国家专业分类目录
  • 大型车产品网站建设网站建设选哪家
  • 怎么制作弹幕网站南宁建设信息网
  • 网站建设公司运营模式wordpress logo插件