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

浦北县住房和城乡建设局网站企业网站如何做推广

浦北县住房和城乡建设局网站,企业网站如何做推广,seoapp推广,深圳网站域名更多个人笔记见: github个人笔记仓库 gitee 个人笔记仓库 个人学习,学习过程中还会不断补充~ (后续会更新在github和 gitee上) 文章目录 作用经典例子生产者(发送端)消费者(接收端&a…

更多个人笔记见:
github个人笔记仓库
gitee 个人笔记仓库
个人学习,学习过程中还会不断补充~ (后续会更新在github和 gitee上)

文章目录

    • 作用
    • 经典例子
        • 生产者(发送端)
        • 消费者(接收端)

作用

类似一个“中间过渡器”,应对突发流量导致数据库连接池耗尽或者请求导致服务崩溃

  • 流量洪峰​​:促销活动时,前置 Nginx 将请求写入 RabbitMQ,后端服务按能力消费
  • 容灾恢复​​:数据库故障期间,消息持久化在队列;恢复后继续消费 (消费指的是 Mysql 取出数据然后存起来)
  • 将任务分发到多个消费者实例,确保高负载下任务均匀分配。这就可以实现负载均衡 (比如多个 worker 处理帖子审核)

需要考虑如果用户的申请不是很多情况下,多引入一层 RabbitMQ 其实会导致实际的速度变慢(毕竟多加了一层)

经典例子

GO 语言相关库:go get -u github.com/streadway/amqp

docker 快速部署 rabbitMQ:docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management

  • 5672:AMQP 端口
  • 15672:管理界面端口,访问 http://localhost:15672 ( 默认用户/密码:guest/guest)
生产者(发送端)

创建 producer文件夹下创建producer.go ,然后单独 go run(同时 go run 后面的消费者记得)

package mainimport ("fmt""log""time""github.com/streadway/amqp"
)// 统一错误输出
func failOnError(err error, msg string) {if err != nil {log.Fatalf("%s: %s", msg, err)}
}func main() {// 连接 RabbitMQconn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")failOnError(err, "Failed to connect to RabbitMQ")defer conn.Close() //关闭连接ch, err := conn.Channel() //建立通道,通过 conn 建立的,可以调用 amqp 中的函数failOnError(err, "Failed to open a channel")defer ch.Close()// 声明队列q, err := ch.QueueDeclare("post_queue", // 指定创建或引用的队列名称false,        // 持久化  false 表示队列不会持久化到磁盘,重启 RabbitMQ 后会丢失。true 的话重启后就还在false,        // 自动删除   设置为 false 表示队列不会自动删除,如果 true,最后一个消费者断开后队列删除false,        // 独占   设置为 true 表示该队列只供一个消费者使用,当连接关闭后,队列会自动删除。false表示队列可以被多个连接使用false,        // 无等待  false 表示需要服务器确认队列创建,true表示客户端不会等待服务器的确认响应,如果操作失败也不会收到错误通知nil,          // 额外参数  额外参数可以用来设置队列的特殊属性,如消息TTL、队列最大长度、死信队列等)failOnError(err, "Failed to declare a queue")// 设置定时器,每5秒发送一次消息ticker := time.NewTicker(1 * time.Second)defer ticker.Stop()// 创建一个函数用于发送消息,这样循环调用函数就是发送多次消息sendMessage := func(msgContent string) {err = ch.Publish("",     // 交换机名称   这里是默认交换机,能够将消息直接路由到与路由键同名的队列q.Name, // 路由键   也就是队列名称,路由键应该与目标队列名称一致,消息才能被正确路由false,  // mandatory标志  false 表示消息无法路由到队列,则消息会被丢弃  如果是 true 就是当消息不能路由到队列时,RabbitMQ会返回一个Basic.Return命令给生产者false,  // immediate 标志   false 表示如果队列中没有消费者,消息会被存入队列等待消费, true表示当没有消费者能够立即消费该消息时,消息不会入队而是被丢弃amqp.Publishing{ //消息内容和性质ContentType: "text/plain",       //制定为 MIME 类型Body:        []byte(msgContent), //转换为字节类型})if err != nil {log.Printf("Failed to publish a message: %s", err)return}log.Printf(" [x] Sent %s", msgContent)}count := 1log.Println("Starting periodic message sending. Press Ctrl+C to exit.")// 等待定时器触发,定期发送消息for range ticker.C {sendMessage(fmt.Sprintf("Hello, RabbitMQ! Message #%d", count))count++}
}
  • 这里我将函数设置为每间隔 1s 就发送消息,同时记录数据
  • 如果运行后,隔一段时间再启动消费者,或者说运行中途关闭消费者,过一段时间再启动消费者,会发现中间发出的信号也会打印出来,这说明实际上是有存储在 RabbitMQ 中的(运行的时候,关闭后存储就需要看上面的设置了)
消费者(接收端)

consumer 文件夹下创建 consumer.go 然后单独一个终端 go run

package mainimport ("log""github.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:guest@localhost:5672/")failOnError(err, "Failed to connect to RabbitMQ")defer conn.Close()//连接 channelch, err := conn.Channel()failOnError(err, "Failed to open a channel")defer ch.Close()q, err := ch.QueueDeclare("post_queue", false, false, false, false, nil)failOnError(err, "Failed to declare a queue")msgs, err := ch.Consume(q.Name, // 队列"",     // 消费者标签true,   // 自动确认false,  // 独占false,  // 无本地false,  // 无等待nil,    // 额外参数)failOnError(err, "Failed to register a consumer")forever := make(chan bool)go func() {for d := range msgs {log.Printf("Received: %s", d.Body)}}()log.Printf(" [*] Waiting for messages. To exit press CTRL+C")<-forever
}

文章转载自:

http://1PBSPPzx.ghxkm.cn
http://OEog2OUy.ghxkm.cn
http://h4wxsMa0.ghxkm.cn
http://xcyEyaOm.ghxkm.cn
http://joLbjfnB.ghxkm.cn
http://VBZ0uudG.ghxkm.cn
http://jem9znpS.ghxkm.cn
http://Cde7Mnvy.ghxkm.cn
http://7pPugLDs.ghxkm.cn
http://vFeVF3a6.ghxkm.cn
http://kWDcKnP0.ghxkm.cn
http://Gephn18E.ghxkm.cn
http://bTX7afGH.ghxkm.cn
http://TGoXjIEt.ghxkm.cn
http://6eoRbgQk.ghxkm.cn
http://7IZPochS.ghxkm.cn
http://IxVwqDdw.ghxkm.cn
http://MT3cGOde.ghxkm.cn
http://AY1ITAN4.ghxkm.cn
http://00P8VEM4.ghxkm.cn
http://u0BBNpZL.ghxkm.cn
http://c25HjUx6.ghxkm.cn
http://xZzme16L.ghxkm.cn
http://zX2Husaa.ghxkm.cn
http://DyqZCZ7l.ghxkm.cn
http://zUnx9xOF.ghxkm.cn
http://EqTcCraZ.ghxkm.cn
http://ZXbhTMNQ.ghxkm.cn
http://aMbuGNZI.ghxkm.cn
http://Z78oNwJ1.ghxkm.cn
http://www.dtcms.com/wzjs/756954.html

相关文章:

  • 福建路桥建设有限公司网站ui设计招聘
  • 网站引导页作用企业做一个网站多少钱
  • 云南企业展厅设计公司山东seo网络推广
  • 各大网站平台发布信息怎样做网站规划
  • 建企业版网站多久鼠标垫东莞网站建设
  • 360建站模板优化网站用软件好吗
  • 信用网站一体化建设方案工厂展厅设计效果图
  • 石家庄网站建设培训音乐分享网站源码
  • 诸城网站开发软文外链购买平台
  • 教育政务网站建设2015做那些网站能致富
  • wordpress建站有广告吗长葛网站建设公司
  • 南宁百度网站公司哪家好嘉兴网络项目建站公司
  • 静海网站建设公司廊坊seo网站排名
  • 网站首页导航怎么做二级导航平面设计师的工作内容
  • 网站备案导致网站被k在上海找工作用哪个招聘网好
  • 建立网站的方案网络营销有什么方式
  • 如何推广网站链接工程建设造价信息网站
  • 设计网站推荐国外iapp怎么把网站做软件
  • 深圳建设发展有限公司深圳网站关键字优化
  • 无为县住房和城乡建设局网站首页东莞能做网站的公司
  • 南昌网站建设公司网站建设公司哪家好营销活动网站
  • 荆州松滋网站建设自媒体怎么入门
  • 网站图片怎么做优化定制小程序制作一个需要多少钱
  • 网站域名管理怎么登陆深圳汇网网站建设
  • 免费网站服务器安全软件下载网页设计导航条怎么做
  • 四川网站建设套餐网站推广的基本方法是
  • 网站首页包含的内容eclipse视频网站开发
  • 天博网站建设网站的背景图怎么做
  • 特色设计网站推荐上海诚杰华建设工程咨询有限公司网站
  • 深圳微商城网站设计多少钱云梦网络建站