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

论文收录网站排名网站制作公司有哪些

论文收录网站排名,网站制作公司有哪些,天津手机网站建设制作,网站如何推广运营1.发布订阅 在Fanout模式中#xff0c;一条消息#xff0c;会被所有订阅的队列都消费。但是#xff0c;在某些场景下#xff0c;我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。 在Direct模型下#xff1a; 队列与交换机的绑定#xff0c;不能…1.发布订阅 在Fanout模式中一条消息会被所有订阅的队列都消费。但是在某些场景下我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。 在Direct模型下 队列与交换机的绑定不能是任意绑定了而是要指定一个RoutingKey路由key消息的发送方在向 Exchange发送消息时也必须指定消息的 RoutingKey。Exchange不再把消息交给每一个绑定的队列而是根据消息的Routing Key进行判断只有队列的Routingkey与消息的 Routing key完全一致才会接收到消息 2.绑定 绑定可以采用额外的routing_key参数。为了避免与Channel.Publish参数混淆我们将其称为binding key。这是我们如何使用键创建绑定的方法 err ch.QueueBind(q.Name, // queue nameblack, // routing keylogs, // exchangefalse,nil) 3.直连交换器 direct交换器背后的路由算法很简单——消息进入其binding key与消息的routing key完全匹配的队列。 绑定了两个队列的direct交换器X。第一个队列绑定键为orange第二个队列绑定为两个一个绑定键为black另一个为green。 在这种设置中使用orange路由键发布到交换器的消息将被路由到队列Q1。路由键为black或green的消息将转到Q2。所有其他消息将被丢弃。 4.多重绑定 用相同的绑定键绑定多个队列是完全合法的。在我们的示例中我们可以使用绑定键black在X和Q1之间添加绑定。在这种情况下direct交换器的行为将类似fanout并将消息广播到所有匹配的队列。带有black路由键的消息将同时传递给Q1和Q2。 5.发送日志 在日志系统中使用这个模型发送消息到direct交换器。这样接收脚本将能够选择其想要接收的日志级别。 先创建一个direct交换器 err ch.ExchangeDeclare(logs_direct, // namedirect, // typetrue, // durablefalse, // auto-deletedfalse, // internalfalse, // no-waitnil, // arguments )指定routing key发送一条消息 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”之一。 6.订阅 为感兴趣的每种严重性日志级别创建一个新的绑定。绑定的routing key通过os.Args获取 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) }7.完整示例 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.这里是emit_log_direct.go)和receive_logs_direct.go的完整源码 参考文章 go rabbitmq Routing模式 - 范斯猫 (fansimao.com) RabbitMQ Go语言客户端教程4——路由 - 范斯猫 (fansimao.com)
http://www.hkea.cn/news/14478729/

相关文章:

  • 广州专业网站制作哪家专业建筑工程施工承包合同
  • icp备案网站建设方案书米拓cms
  • 珠海市住房建设局网站做网站要多少钱 知乎
  • 外贸开发网站开发下载素材第三方网站是怎么做
  • 做网站数据库怎么做惠州网站建设找哪个公司
  • 烟台网站制作厂家电话wordpress订阅关闭
  • 做国际网站怎么能快速打开美容茌哪个网站做宣传好
  • 做网站栏目都包括什么东莞网站建设对比
  • 龙岩网站优化公司在线拼图网页版
  • 规范网站建设情况的报告建设工程报建备案网站
  • 湖北智能网站建设推荐北京快三开奖走势图一定牛
  • 建立大型网站吗一键logo设计官网
  • 怎么获取网站的图片利用公共dns做网站解析
  • 北京手机模板建站郑州做定制网站的公司
  • 网上书城网站开发的目的与意义wordpress 前台写文章
  • 单页面销售信网站赚钱系统眉山建设中等职业技术学校 网站
  • 模板网站为什么做不了优化企业官方网站如何做蓝v认证
  • 茶叶网站策划方案如何做好线上推广
  • 辽宁同鑫建设有限公司网站某网站搜索引擎优化
  • 江津集团网站建设海口最新新闻消息
  • cpa怎么做网站一般什么企业需要建站
  • 做网站营销怎么去推广wordpress varnish
  • 龙口建网站价格广东省农业农村厅网站
  • 网站开发公司有什么福利网站关键词用什么隔开
  • 温江网站建设价格给朋友网站做宣传怎么写
  • 网站分析总结wordpress压缩缩略图体积
  • 江苏水利厅建设网站企业网站建设套餐 网络服务
  • 北京微网站制作外贸怎么找客户资源
  • 做网站软件A开头的鞍山吧 百度贴吧
  • 博客网站模板下载物联网应用技术学什么