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

江西网络推广seo系统优化最好的安卓手机

江西网络推广seo,系统优化最好的安卓手机,购物网站功能模块说明,烟台哪里做网站路由 在上一教程中#xff0c;我们构建了一个简单的日志记录系统。我们能够向许多接收者广播日志消息。 在本教程中#xff0c;我们将向它添加一个特性-我们将使它能够只订阅消息的一个子集。例如#xff0c;我们将只能将关键错误消息定向到日志文件#xff08;以节省磁盘…路由 在上一教程中我们构建了一个简单的日志记录系统。我们能够向许多接收者广播日志消息。 在本教程中我们将向它添加一个特性-我们将使它能够只订阅消息的一个子集。例如我们将只能将关键错误消息定向到日志文件以节省磁盘空间同时仍然能够在控制台上打印所有日志消息。 绑定 在前面的示例中我们已经在创建绑定。你可能会想起以下代码 err ch.QueueBind(q.Name, // queue name, // routing keylogs, // exchangefalse,nil)绑定是交换器和队列之间的关系。这可以简单地理解为队列对来自此交换器的消息感兴趣。 绑定可以采用额外的routing_key参数。为了避免与Channel.Publish参数混淆我们将其称为binding key。这是我们如何使用键创建绑定的方法 err ch.QueueBind(q.Name, // queue nameblack, // routing keylogs, // exchangefalse,nil)绑定密钥的含义取决于交换器的类型。我们以前使用的fanout交换器只是忽略了这个值。 直连交换器 我们上一个教程中的日志系统将所有消息广播给所有消费者。我们希望扩展这一点允许根据消息的严重性过滤消息。例如我们可能希望将日志消息写入磁盘的脚本只接收严重错误而不会在warning或info日志消息上浪费磁盘空间。 我们使用fanout交换器这并没有给我们很大的灵活性——它只能进行无脑广播。 我们将使用direct交换器。direct交换器背后的路由算法很简单——消息进入其binding key与消息的routing key完全匹配的队列。 为了说明这一点请考虑以下设置 在此设置中我们可以看到绑定了两个队列的direct交换器X。第一个队列绑定键为orange第二个队列绑定为两个一个绑定键为black另一个为green。 在这种设置中使用orange路由键发布到交换器的消息将被路由到队列Q1。路由键为black或green的消息将转到Q2。所有其他消息将被丢弃。 多重绑定 用相同的绑定键绑定多个队列是完全合法的。在我们的示例中我们可以使用绑定键black在X和Q1之间添加绑定。在这种情况下direct交换器的行为将类似fanout并将消息广播到所有匹配的队列。带有black路由键的消息将同时传递给Q1和Q2。 发送日志 我们将在日志系统中使用这个模型。我们将发送消息到direct交换器而不是fanout。我们将提供严重性译注通常我们使用日志级别划分日志信息的严重性作为路由键。这样接收脚本将能够选择其想要接收的日志级别。让我们首先关注发送日志。 与往常一样我们需要首先创建一个交换器 err ch.ExchangeDeclare(logs_direct, // namedirect, // typetrue, // durablefalse, // auto-deletedfalse, // internalfalse, // no-waitnil, // arguments )我们已经准备好发送一条消息 err ch.ExchangeDeclare(logs_direct, // namedirect, // typetrue, // durablefalse, // auto-deletedfalse, // internalfalse, // no-waitnil, // arguments ) failOnError(err, Failed to declare an exchange)body : bodyFrom(os.Args) err ch.Publish(logs_direct, // exchangeseverityFrom(os.Args), // routing keyfalse, // mandatoryfalse, // immediateamqp.Publishing{ContentType: text/plain,Body: []byte(body), })为了简化问题我们假设“严重性”可以是“info”、“warning”、“error”之一。 订阅 接收消息的工作方式与上一教程一样但有一个例外——我们将为感兴趣的每种严重性日志级别创建一个新的绑定。 q, err : ch.QueueDeclare(, // namefalse, // durablefalse, // delete when unusedtrue, // exclusivefalse, // no-waitnil, // arguments ) failOnError(err, Failed to declare a queue)if len(os.Args) 2 {log.Printf(Usage: %s [info] [warning] [error], os.Args[0])os.Exit(0) } // 建立多个绑定关系 for _, s : range os.Args[1:] {log.Printf(Binding queue %s to exchange %s with routing key %s,q.Name, logs_direct, s)err ch.QueueBind(q.Name, // queue names, // routing keylogs_direct, // exchangefalse,nil)failOnError(err, Failed to bind a queue) }完整示例 emit_log_direct.go脚本的代码 package mainimport (logosstringsgithub.com/streadway/amqp )func failOnError(err error, msg string) {if err ! nil {log.Fatalf(%s: %s, msg, err)} }func main() {conn, err : amqp.Dial(amqp://guest:guestlocalhost:5672/)failOnError(err, Failed to connect to RabbitMQ)defer conn.Close()ch, err : conn.Channel()failOnError(err, Failed to open a channel)defer ch.Close()err ch.ExchangeDeclare(logs_direct, // namedirect, // typetrue, // durablefalse, // auto-deletedfalse, // internalfalse, // no-waitnil, // arguments)failOnError(err, Failed to declare an exchange)body : bodyFrom(os.Args)err ch.Publish(logs_direct, // exchangeseverityFrom(os.Args), // routing keyfalse, // mandatoryfalse, // immediateamqp.Publishing{ContentType: text/plain,Body: []byte(body),})failOnError(err, Failed to publish a message)log.Printf( [x] Sent %s, body) }func bodyFrom(args []string) string {var s stringif (len(args) 3) || os.Args[2] {s hello} else {s strings.Join(args[2:], )}return s }func severityFrom(args []string) string {var s stringif (len(args) 2) || os.Args[1] {s info} else {s os.Args[1]}return s }receive_logs_direct.go的代码 package mainimport (logosgithub.com/streadway/amqp )func failOnError(err error, msg string) {if err ! nil {log.Fatalf(%s: %s, msg, err)} }func main() {conn, err : amqp.Dial(amqp://guest:guestlocalhost:5672/)failOnError(err, Failed to connect to RabbitMQ)defer conn.Close()ch, err : conn.Channel()failOnError(err, Failed to open a channel)defer ch.Close()err ch.ExchangeDeclare(logs_direct, // namedirect, // typetrue, // durablefalse, // auto-deletedfalse, // internalfalse, // no-waitnil, // arguments)failOnError(err, Failed to declare an exchange)q, err : ch.QueueDeclare(, // namefalse, // durablefalse, // delete when unusedtrue, // exclusivefalse, // no-waitnil, // arguments)failOnError(err, Failed to declare a queue)if len(os.Args) 2 {log.Printf(Usage: %s [info] [warning] [error], os.Args[0])os.Exit(0)}for _, s : range os.Args[1:] {log.Printf(Binding queue %s to exchange %s with routing key %s,q.Name, logs_direct, s)err ch.QueueBind(q.Name, // queue names, // routing keylogs_direct, // exchangefalse,nil)failOnError(err, Failed to bind a queue)}msgs, err : ch.Consume(q.Name, // queue, // consumertrue, // auto ackfalse, // exclusivefalse, // no localfalse, // no waitnil, // args)failOnError(err, Failed to register a consumer)forever : make(chan bool)go func() {for d : range msgs {log.Printf( [x] %s, d.Body)}}()log.Printf( [*] Waiting for logs. To exit press CTRLC)-forever }如果你只想将“warning”和“err”而不是“info”级别的日志消息保存到文件中只需打开控制台并输入 go run receive_logs_direct.go warning error logs_from_rabbit.log如果你想在屏幕上查看所有日志消息请打开一个新终端并执行以下操作 go run receive_logs_direct.go info warning error # [*] Waiting for logs. To exit press CTRLC例如要发出error日志消息只需输入 go run emit_log_direct.go error Run. Run. Or it will explode. # [x] Sent error:Run. Run. Or it will explode.源自https://www.rabbitmq.com/getstarted.html
http://www.hkea.cn/news/14554158/

相关文章:

  • 建筑公司网站大全apm安装wordpress网页无法访问
  • 做遗嘱的网站有哪些建设银行签证预约网站
  • p2p网站开发的多少钱专业网站制作团队专业网站制作团队
  • 溧水做网站价格商务网站建设摘要
  • 网站建设及目标网站维护和更新
  • 沧州市东光建设局 网站广告公司 名称
  • 建站公司佛山网站开发专业就业前景分析
  • 秦皇岛网站开发报价湖南省建六公司官网
  • 常州做网站包括哪些上海网站搭建公司哪家好
  • php 网站开发架构住建网官网
  • 沧州做网站费用上海搜索引擎优化
  • 哈尔滨网站建设那家好360建筑网现在叫什么
  • 个人网站开发与设计摘要自己想建设一个网站
  • 网站地图的作用seo海外
  • 中国工程建设交易信息网站wap页面模板
  • 怎么做网站原型上海新媒体运营公司排名
  • 大连的网站制作公司太原百度关键词优化
  • 织梦网站源码医疗器械研发
  • 做网站 接单职业生涯规划大赛怎么准备
  • 温州开发网站公司wordpress分类链接打不开
  • 网站做5级分销合法吗wordpress零基础建站教程
  • seo 网站换程序wordpress做个人博客
  • 黑龙江华龙建设集团网站网站的关键词搜索怎么做
  • 设计产品网站推荐外贸行业建站
  • 用html是做班级简介网站个人简历网页制作教程
  • 南阳河南网站建设价格推广方式英语
  • 东莞桂城网站建设wordpress站点标题和副标题
  • 百度网站查反链餐饮公司网站模板下载
  • 创新的广州做网站网站开发注意事项
  • 网站虚拟主持创意产品设计图