首页 文章 精选 留言 我的

精选列表

搜索[抗量子签名服务],共10000篇文章
优秀的个人博客,低调大师

基于RabbitMQ解决微信大量并发回调的问题(微信产品服务端工程师值得看)

前言 大量粉丝的公众号已经有非常多了,数百万数千万的都很多,再加上很多微信开放平台,导致接收的微信回调非常多,如:关注/取消关注,获取地理位置,发消息,向用户推送模板消息,点击菜单,扫描带参二维码。这么多场景都会导致微信回调,若单纯使用Tomcat,Undertow,apache之类的Web容器去处理,使用资源成本比较大,而且微信要求在5s内进行回复直接异步处理也需要很多机器才处理得来。可以选择使用些高性能IO框架去解决 如果:smart-io, tio, netty, swoole之类去增加吞吐量,但是这样增加了学习成本和维护成本。我之前写过一篇文章是用Redis来解决的解决模板消息回调的困扰, 但是死循环会长期占用一条RUNNABLE线程,比较浪费cpu资源,可以优化成用分布式锁+rangeAll降低循环频率从而减轻负载,这次我要介绍的是使用RabbitMQ去处理(Nginx + Lua + RabbitMQ)。 准备工作 搭建RabbitMQ集群,我有个小伙伴写了篇博客,现在分享一下: RabbitMQ集群原理和部署 SpringBoot整合RabbitMQ Lua连接RabbitMQ官方推介使用rabbitmqstomp # 开启RabbitMQ的rabbitmq_stomp插件(版本过低的可能会没有这个插件) rabbitmq-plugins enable rabbitmq_stomp 开启*rabbitmq_stomp插件后会监听多一个端口 61613 (很重要,没有测试过端口冲突的情况),如果是单机RabbitMQ的话,在Lua脚本中应该连接这个端口。 都说是针对生产环境搭建的,所以HAProxy肯定少不了,修改haproxy的配置文件 /etc/haproxy/haproxy.cfg ,不一样的自行切换。下面贴上HAProxy的配置: listen rabbitmqstomp 10.0.0.1:5670 mode tcp balance roundrobin server rabbit-master 10.0.0.2:61613 check inter 5s rise 2 fall 3 server rabbit-node1 10.0.0.3:61613 check inter 5s rise 2 fall 3 Lua脚本 -- 打印日志 function log(fileName, content) local f = assert(io.open(fileName,'a')) f:write(content..'\n') f:close() end -- 读取请求Get参数 ngx.req.read_body() local data, err = ngx.req.get_body_data() if (nil ~= err) then log(log_file, "body is null: " + err) return end if(nil == data) then params = ngx.req.get_uri_args() ngx.say(ngx.var.arg_echostr) ngx.exit(ngx.HTTP_OK); return end local log_file = '/var/log/nginx/logs/redis.log' local rabbitmq = require "resty.rabbitmqstomp" local cjson = require "cjson" local opts = { host = '10.0.0.1', port = '5670', username = 'abcd', password = 'abcd', vhost = 'abc' } local mq, err = rabbitmq:new(opts) if not mq then log(log_file, "can not new rabbitmq: " .. err) return end mq:set_timeout(10000) local ok, err = mq:connect(opts['host'], opts['port']) if not ok then log(log_file, "Connect Error: " .. err) mq:close() return end local args, err = ngx.req.get_uri_args() if (nil ~= err) then log(log_file, "getURI: " + err) mq:close() return end local message = {} message['signature'] = args['msg_signature'] message['timestamp'] = args['timestamp'] message['nonce'] = args['nonce'] message['data'] = data local text = cjson.encode(message) ngx.log(ngx.ERR, text) local headers = {} -- 消息发送到哪里 /exchange/交换机名称/routing_key名称 headers["destination"] = "/exchange/topic.wechatEvent.receive/wechatEvent.receive" -- -- 是否持久化 headers["persistent"] = "true" -- -- 消息格式 headers["content-type"] = "application/json" local ok, err = mq:send(text, headers) if not ok then ngx.log(ngx.ERR, "cannot send mq") mq:close() return end -- 消息保持长连接,第一个参数表示连接超时时间,第二个参数是表示连接池大小 -- -- 由于 rabbitmq 连接建立比较耗时,所以保持连接池是非常必要的 local ok, err = mq:set_keepalive(10000, 500) if not ok then log(log_file, "set keepalive error: " .. err) mq:close() return end ngx.say('success') ngx.exit(ngx.HTTP_OK) Java代码 @RabbitListener(queues = MQConstants.Queue.WECHAT_EVENT_RECEIVE) public void handle(WechatReceiveMessage receiveMessage) throws Exception { //TODO } 总结 对比之前之前用Redis处理,用RabbitMQ更加实时,更加稳定更高并发,应该算是初创团队的最优方案了。觉得好的可以收藏下点个赞支持一下。

优秀的个人博客,低调大师

玩转神龙服务器的Hyper-V虚拟化网络配置之 保持虚拟机网络连通性

相信已经有同学已经在神龙上部署了Hyper-V了。又可以随心所欲的创建VM玩耍了。但是关于Hyper-V虚拟机的网络配置,相信还有一些同学没有玩过。 首先,我们来简单介绍下Hyper-v的三种虚拟交换机的类型: 外部交换机 这种交换机允许虚拟机访问到真实的物理网络。虚拟机之间和Hyper-V Server (这里是我们的神龙物理机)也可以相互访问。 Hyper-V Server操作系统的直观变化:创建一个虚拟网卡,将真实网卡的所有协议转移到这个网卡上,真实网卡只保留 LLDP 协议和 Hyper-V Extensible Virtual Switch协议。真实网卡充当了虚拟交换机的角色。 内部交换机 这种交换机允许虚拟机以及Hyper-V Server之间相互访问。除非特殊配置,虚拟机无法访问真实网络。 Hyper-V Server操作系统的直

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册