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

怎么搭建自己的网站卖货上海b2b网络推广外包

怎么搭建自己的网站卖货,上海b2b网络推广外包,最好用的企业网站cms,数据分析师需要考哪些证书TOC 目录 路由匹配模块 代码展示 路由匹配模块 决定了一条消息是否能够发布到指定的队列 在每个队列根交换机的绑定信息中,都有一个binding_key(在虚拟机篇有说到)这是队列发布的匹配规则 在每条要发布的消息中,都有一个rout…
@TOC

目录

路由匹配模块

代码展示


路由匹配模块

决定了一条消息是否能够发布到指定的队列

在每个队列根交换机的绑定信息中,都有一个binding_key(在虚拟机篇有说到)这是队列发布的匹配规则

在每条要发布的消息中,都有一个routing_key, 是消息的发布规则

交换机有三种交换类型:直接交换,广播交换,主题交换

广播交换:直接将消息发布给交换机的所有绑定队列

直接交换:routing_key和binding_key完全一致则匹配成功

主题交换:binding_key中是匹配规则 new.music.#, routing_key是消息规则 new.music.pop,匹配成功才能发布

1. 提供一个判断routing_key与binding_key是否能够匹配成功的接口

2. 判断 routing_key是否符合规定:

        格式约定:只能由数字,字母,_ 构成

3. 判断binding_key是否符合规定:

        格式约定只能由数字,字母,_,# ,* 构成

代码展示

#ifndef __M_ROUTE_H_
#define __M_ROUTE_H_#include <iostream>
#include "../mqcommon/logger.hpp"
#include "../mqcommon/helper.hpp"
#include "../mqcommon/msg.pb.h"namespace mymq
{class Router{public:static bool isLegalRoutingKey(const std::string& routing_key){// routing_key: 不需要判断是否包含有非法字符即可,合法字符(a ~ z, A ~ Z, 0 ~ 9, ....)for(auto& ch : routing_key){if((ch >= 'a' && ch <= 'z') ||(ch >= 'A' && ch <= 'Z') ||(ch >= '1' && ch <= '9') ||(ch == '_' || ch == '.'))continue;return false;}return true;}static bool isLegalBindingKey(const std::string& binding_key){for(auto& ch : binding_key){if((ch >= 'a' && ch <= 'z') ||(ch >= 'A' && ch <= 'Z') ||(ch >= '1' && ch <= '9') ||(ch == '_' || ch == '.') ||(ch == '#' || ch == '*'))continue;return false;}// 2. * 和 # 必须独立存在std::vector<std::string> sub_word;StrHelper::split(binding_key, ".", sub_word);for(std::string& word : sub_word){if((word.size() > 1) && (word.find("*") != std::string::npos && (word.find("#") != std::string::npos))){return false;}}// 3. * 和 # 不能连续出现for(int i = 1; i < sub_word.size(); i++){if(sub_word[i] == "*" && sub_word[i - 1] == "#"){return false;}if(sub_word[i] == "#" && sub_word[i - 1] == "#"){return false;}if(sub_word[i] == "#" && sub_word[i - 1] == "*"){return false;}}return true;}static bool route(ExchangeType type, const std::string& routing_key, const std::string& binding_key){if(type == ExchangeType::DIRECT){return (routing_key == binding_key);}else if(type == ExchangeType::FANOUT){return true;}// 主题交换 : 要进行模式匹配 : // 1. 将 binding_key 与 routing_key 进行字符串分割,得到各个单词数组std::vector<std::string> bkeys, rkeys;int n_rkeys = StrHelper::split(routing_key, ".", rkeys);int n_bkeys = StrHelper::split(binding_key, ".", bkeys);// 2. 定义标记数组, 并初始化[0][0]位置为true, 其他位置为falsestd::vector<std::vector<bool>> dp(n_bkeys + 1, std::vector<bool>(n_rkeys + 1));dp[0][0] = true;//3. 如果binding_key以#开始,则将#对应的第0行全部为1for(int i = 1; i < n_bkeys; i++){if(bkeys[i - 1] == "#"){dp[i][0] = true;continue;}break;}// 4. 使用routing_key中的每个单词与binding_key中的每个单词进行匹配并标记数组for(int i = 1; i < n_bkeys + 1; i++){for(int j = 1; j < n_rkeys + 1; j++){if(bkeys[i - 1] == rkeys[j - 1] || bkeys[i - 1] == "*"){dp[i][j] = dp[i - 1][j - 1];}else if(bkeys[i - 1] == "#"){dp[i][j] = dp[i - 1][j - 1] | dp[i][j - 1] | dp[i - 1][j];}}}return dp[n_bkeys][n_rkeys];}};
}#endif

http://www.dt0577.cn/news/26882.html

相关文章:

  • 重庆 机械有限公司 江北网站建设semi
  • 北京通州个人网站建设天津百度seo代理
  • 做外贸用哪些网站体球网足球世界杯
  • 淄博网站排名优化公司百度知道官网登录入口
  • 网络游戏推广公司重庆seo是什么
  • 关于内网站建设的请示软文案例短篇
  • 购物网站的页面设计化学sem是什么意思
  • 即时设计365优化大师软件下载
  • 深圳网站设计公司电nba西部最新排名
  • 建设网站方法有哪些拉新平台哪个好佣金高
  • 电商类网站建设价格百度推广优化怎么做
  • 厦门汽车充电站建设报备网站推广教程
  • 广州最新新闻发大水seo关键词排名优化价格
  • 椒江街道招聘建设网站网络营销常用的方法有哪些
  • 如何选择深圳网站建设深圳百度推广
  • 邢台移动网站建设seo竞价培训
  • 网站构建技术百度贴吧网页版
  • 衡水建设网站首页百度关键词优化多久上首页
  • php 手机网站 模板百度云搜索引擎入口网盘搜索神器
  • wordpress博客页面seo网站关键词快速排名
  • 北京做网站的人百度网站优化培训
  • 织梦做信息类网站seo外包公司多吗
  • 云服务器可以做两个网站发布外链的步骤
  • 什么网站可以做软件有哪些东西吗如何营销推广自己的产品
  • 精通网站建设工资多少seo和sem的区别与联系
  • 2万元建设网站贵吗电商大数据查询平台
  • 天津做网站都找津坤科技重庆网站制作
  • 邢台网站推广多少钱东莞seo建站优化哪里好
  • 长沙做网站建设网络营销方法和手段
  • 网站建设内容工作总结网络推广收费价目表