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

国外网站用什么dns爱豆影视传媒有限公司

国外网站用什么dns,爱豆影视传媒有限公司,重庆网站建设软件,深圳建筑工程网文章目录 一、安装 MySQL1.1 启动 mysql 服务器1.2 开启 Binlog 写入功能1.2.1创建 binlog 配置文件1.2.2 修改配置文件权限1.2.3 挂载配置文件1.2.4 检测 binlog 配置是否成功 1.3 创建账户并授权 二、安装 RocketMQ2.1 创建容器共享网络2.2 启动 NameServer2.3 启动 Broker2.… 文章目录 一、安装 MySQL1.1 启动 mysql 服务器1.2 开启 Binlog 写入功能1.2.1创建 binlog 配置文件1.2.2 修改配置文件权限1.2.3 挂载配置文件1.2.4 检测 binlog 配置是否成功 1.3 创建账户并授权 二、安装 RocketMQ2.1 创建容器共享网络2.2 启动 NameServer2.3 启动 Broker2.4 启动 rocketmq-console 三、安装 canal3.1 启动容器3.2 查看日志 四、安装 Redis4.1 启动 Redis4.2 使用 Another Redis Desktop Manager 客户端 五、实现客户端代码5.1 导入依赖5.2 配置 application.yaml5.3 实现Canal同步服务代码5.3.1 Canal同步服务接口5.3.2 抽象Canal-RocketMQ通用处理服务5.3.3 具体类的同步服务实现 5.4 实体类5.5 RocketMQ 消费者5.6 后续优化方案 六、测试客户端代码6.1 创建数据库及表6.2 插入数据 参考资料 一、安装 MySQL QuickStart · alibaba/canal Wiki (github.com) 1.1 启动 mysql 服务器 docker run --name mysql-canal ^ -p 3306:3306 ^ -e MYSQL_ROOT_PASSWORDroot ^ -d mysql:5.7.361.2 开启 Binlog 写入功能 对于自建 MySQL容器 , 我们需要开启 Binlog 写入功能。 1.2.1创建 binlog 配置文件 在宿主机上创建 my.cnf 文件配置 binlog-format 为 ROW 模式。my.cnf 的配置内容如下 [mysqld] # 开启 binlog log-binmysql-bin # 选择 ROW 模式 binlog-formatROW # 配置 MySQL replaction 需要定义不要和 canal 的 slaveId 重复 server_id1 1.2.2 修改配置文件权限 进入 MySQL 容器并修改 MySQL 容器配置文件 /etc/mysql/my.cnf 权限以避免权限警告 # 进入 MySQL 容器 $ docker exec -it mysql-canal bash# 修改文件权限 $ chmod 644 /etc/mysql/my.cnf $ exit注意在没有修改配置文件并启动 MySQL 容器情况下MySQL 会警告配置文件 /etc/mysql/my.cnf 权限设置不当允许所有用户写入world-writable。由于安全原因MySQL 会忽略这个配置文件。 [Warning] World-writable config file /etc/mysql/my.cnf is ignored.1.2.3 挂载配置文件 在 MySQL 容器运行后使用以下命令将创建的 my.cnf 文件覆盖容器内的 /etc/mysql/my.cnf # 覆盖配置文件 $ docker cp D:\Learning\java-demos\middleware-demos\spring-boot-canal\src\main\resources\conf\my.cnf mysql-canal:/etc/mysql/# 为了使新的配置生效重启 MySQL 容器 $ docker restart mysql-canal注意MySQL 容器的 /etc/mysql/my.cnf 是一个符号链接直接指定完整路径时会导致问题。 MySQL 启动时会首先加载主配置文件 /etc/mysql/my.cnf然后加载 conf.d 目录下的所有配置文件。 1.2.4 检测 binlog 配置是否成功 进入 MySQL 利用 show variables like log_bin; 查看是否打开 binlog 模式 $ docker exec -it mysql-canal bash# 查看挂载后的 my.cnf 文件 $ tail /etc/mysql/my.cnf# 查看 binlog 是否开启 $ mysql -uroot -proot mysql show variables like log_bin; ---------------------- | Variable_name | Value | ---------------------- | log_bin | ON | ---------------------- 1 row in set (0.01 sec)# 查看 binlog 日志文件列表 mysql show binary logs;# 查看正在写入的 binlog 文件 mysql show master status;# 查看 Binlog 文件内容 mysql mysqlbinlog /var/lib/mysql/mysql-bin.000001 1.3 创建账户并授权 授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant # 进入 mysql 容器 $ docker exec -it mysql-canal mysql -uroot -proot# 创建用户名和密码都为 canal 的账户 mysql CREATE USER canal IDENTIFIED BY canal;# 授予权限 GRANT ALL PRIVILEGES ON *.* TO canal% ; mysql GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO canal%; FLUSH PRIVILEGES;二、安装 RocketMQ 2.1 创建容器共享网络 RocketMQ 中有多个服务需要创建多个容器创建 docker 网络便于容器间相互通信。 $ docker network create rocketmq2.2 启动 NameServer 在 Docker 容器中运行 RocketMQ 的 NameServer 服务 # 拉取RocketMQ镜像 $ docker pull apache/rocketmq:5.3.0# 启动 NameServer $ docker run -d ^ -p 9876:9876 ^ --name rmqnamesrv-canal ^ --network rocketmq ^ apache/rocketmq:5.3.0 sh mqnamesrv# 验证 NameServer 是否启动成功 $ docker logs -f rmqnamesrv2.3 启动 Broker Brocker 部署相对麻烦一点主要是在系统里面创建一个配置文件。然后通过 docker 的 -v 参数使用 volume 功能将本地配置文件映射到容器内的配置文件上。否则所有数据都默认保存在容器运行时的内存中重启之后就又回到最初的起点。 (1) 新建配置文件 broker.conf 创建配置文件 broker.conf 放到指定的目录 D:\Learning\java-demos\middleware-demos\spring-boot-canal-redis\src\main\resources\rocketmq\conf 下 brokerClusterName DefaultCluster brokerName broker-a brokerId 0 deleteWhen 04 fileReservedTime 48 brokerRole ASYNC_MASTER flushDiskType ASYNC_FLUSH brokerIP1 10.8.12.174 # 此处为本地ip, 如果部署服务器, 需要填写服务器外网ip注意如果其他容器和本地客户端都要与该容器通信不要使用 localhost 和 host.docker.internal 可以使用 ipconfig 查看当前宿主机的 IP 地址。 (2) 启动容器 # 启动 Broker 和 Proxy $ docker run -d ^ --name rmqbroker-canal ^ --network rocketmq ^ -p 10912:10912 -p 10911:10911 -p 10909:10909 ^ -p 8080:8080 -p 8081:8081 ^ -e NAMESRV_ADDRrmqnamesrv-canal:9876 ^ -e JAVA_OPTS-Duser.home/opt ^ -e JAVA_OPT_EXT-server -Xms512m -Xmx512m ^ -v D:\Learning\java-demos\middleware-demos\spring-boot-canal-redis\src\main\resources\rocketmq\conf\broker.conf:/home/rocketmq/rocketmq-5.3.0/conf/broker.conf ^ apache/rocketmq:5.3.0 sh mqbroker --enable-proxy ^ -c /home/rocketmq/rocketmq-5.3.0/conf/broker.conf# 验证 Broker 是否启动成功 $ docker exec -it rmqbroker-canal bash -c tail -n 10 /home/rocketmq/logs/rocketmqlogs/proxy.log(3)创建 Topic 进入 broker 容器通过 mqadmin 创建 Topic。 # 进入名为rmqbroker的容器并启动一个交互式的Bash shell $ docker exec -it rmqbroker-canal bash # 在容器内部使用 mqadmin 工具创建名为 TestTopic 的主题配置 $ sh mqadmin updatetopic -t canal-test-topic -c DefaultCluster2.4 启动 rocketmq-console 启动容器 docker run -d ^ --name rmqconsole-test ^ --network rocketmq ^ --link rmqnamesrv-canal:namesrv ^ -e JAVA_OPTS-Drocketmq.config.namesrvAddrnamesrv:9876 -Drocketmq.config.isVIPChannelfalse ^ -p 8088:8080 ^ -t pangliang/rocketmq-console-ng运行成功稍等几秒启动时间浏览器输入 http://localhost:8088 查看。 三、安装 canal 3.1 启动容器 # 拉取 Canal Server 的 Docker 镜像 $ docker pull canal/canal-server:v1.1.7# 启动 Canal Server 容器 $ docker run -d ^--name canal-server ^--restart always ^-p 11111:11111 ^--privilegedtrue ^-e canal.destinationstest ^-e canal.serverModerocketMQ ^-e rocketmq.producer.groupmy-producer_canal-test-topic ^-e rocketmq.namesrv.addrhost.docker.internal:9876 ^-e canal.instance.master.addresshost.docker.internal:3306 ^-e canal.instance.filter.regextest_db.users,.*\\..* ^-e canal.mq.topiccanal-test-topic ^-m 4096m ^canal/canal-server:v1.1.73.2 查看日志 在 canal 启动成功后查看启动日志 $ docker logs canal-server 2024-10-28 21:29:00 DOCKER_DEPLOY_TYPEVM 2024-10-28 21:29:00 INIT /alidata/init/02init-sshd.sh 2024-10-28 21:29:00 EXIT CODE: 0 2024-10-28 21:29:00 INIT /alidata/init/fix-hosts.py 2024-10-28 21:29:00 EXIT CODE: 0 2024-10-28 21:29:00 INIT DEFAULT 2024-10-28 21:29:00 INIT DONE 2024-10-28 21:29:00 RUN /home/admin/app.sh 2024-10-28 21:29:01 START ... 2024-10-28 21:29:01 start canal ... 2024-10-28 21:29:00 Failed to get D-Bus connection: Operation not permitted 2024-10-28 21:29:00 Failed to get D-Bus connection: Operation not permitted 2024-10-28 21:29:36 start canal successful 2024-10-28 21:29:36 START SUCCESSFUL ...看到 successful 之后就代表 canal-server 启动成功然后就可以在 canal-admin 上进行任务分配了。 四、安装 Redis 4.1 启动 Redis docker run ^ --restartalways ^ -p 6379:6379 ^ --name redis-canal ^ -d redis:latest --requirepass 1234564.2 使用 Another Redis Desktop Manager 客户端 在 github 上面下载 nother Redis Desktop Manager 客户端并连接到 redis-canal。 五、实现客户端代码 5.1 导入依赖 创建 Spring Boot 项目并导入以下依赖。 dependencygroupIdcom.alibaba.otter/groupIdartifactIdcanal.client/artifactIdversion1.1.7/version /dependency!-- Message、CanalEntry.Entry等来自此安装包 -- dependencygroupIdcom.alibaba.otter/groupIdartifactIdcanal.protocol/artifactIdversion1.1.7/version /dependencydependencygroupIdorg.rocketmq.spring.boot/groupIdartifactIdrocketmq-spring-boot-starter/artifactIdversion2.3.0/version /dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId /dependency5.2 配置 application.yaml application.yaml 的内容如下 spring:application:name: spring-boot-canal-redisdatasource:url: jdbc:mysql://localhost:3306/test_db?useSSLfalseserverTimezoneUTCusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driverdata:redis:host: localhostport: 6379database: 0password: 123456lettuce:pool:max-active: 8max-idle: 8min-idle: 0max-wait: -1msrocketmq:name-server: localhost:9876producer:group: my-producer_canal-test-topicsend-message-timeout: 60000retry-times-when-send-failed: 2retry-times-when-send-async-failed: 2 # consumer: # group: my-consumer_canal-test-topicserver:port: 80895.3 实现Canal同步服务代码 5.3.1 Canal同步服务接口 /*** Canal同步服务接口用于处理来自Canal的数据同步请求* 该接口主要定义了如何处理数据变更事件包括DDL语句执行和DML操作插入、更新、删除** author zouhu* data 2024-10-31 15:16*/ public interface CanalSyncServiceT {/*** 处理数据变更事件* p* 该方法用于处理来自Canal的数据变更事件包括DDL语句执行和其他数据操作如插入、更新和删除* /p** param flatMessage CanalMQ数据*/void process(FlatMessage flatMessage);/*** DDL语句处理** param flatMessage CanalMQ数据*/void ddl(FlatMessage flatMessage);/*** 插入** param list 新增数据*/void insert(CollectionT list);/*** 更新** param list 更新数据*/void update(CollectionT list);/*** 删除** param list 删除数据*/void delete(CollectionT list); } 5.3.2 抽象Canal-RocketMQ通用处理服务 /*** 抽象Canal-RocketMQ通用处理服务*** author zouhu* data 2024-10-31 15:21*/ Slf4j RequiredArgsConstructor public abstract class AbstractCanalRocketMqRedisServiceT implements CanalSyncServiceT {private final RedisTemplateString, Object redisTemplate;private ClassT classCache;/*** 获取Model名称** return Model名称*/protected abstract String getModelName();/*** 处理数据* p* 后续优化可以使用策略模式来封装不同表的操作不一定要统一* /p** param flatMessage CanalMQ数据*/Overridepublic void process(FlatMessage flatMessage) {if (flatMessage.getIsDdl()) {ddl(flatMessage);return;}SetT data getData(flatMessage);if (SqlType.INSERT.getType().equals(flatMessage.getType())) {insert(data);}if (SqlType.UPDATE.getType().equals(flatMessage.getType())) {update(data);}if (SqlType.DELETE.getType().equals(flatMessage.getType())) {delete(data);}}/*** DDL语句处理** param flatMessage CanalMQ数据*/Overridepublic void ddl(FlatMessage flatMessage) {//TODO : DDL需要同步删库清空更新字段处理}/*** 插入** param list 新增数据*/Overridepublic void insert(CollectionT list) {insertOrUpdate(list);}/*** 更新** param list 更新数据*/Overridepublic void update(CollectionT list) {insertOrUpdate(list);}/*** 删除** param list 删除数据*/Overridepublic void delete(CollectionT list) {SetString keys Sets.newHashSetWithExpectedSize(list.size());for (T data : list) {keys.add(getWrapRedisKey(data));}redisTemplate.delete(keys);}/*** 插入或者更新redis* p* data 对象里面还包含 getTypeArgument()的返回值但是没有写到 Redis 里面* /p** param list 数据*/private void insertOrUpdate(CollectionT list) {for (T data : list) {log.info(redis data:{}, data);String key getWrapRedisKey(data);log.info(redis key:{}, key);redisTemplate.opsForValue().set(key, data);}}/*** 封装redis的key** param t 原对象* return key*/protected String getWrapRedisKey(T t) {return getModelName() : getIdValue(t);}/*** 获取类泛型** return 泛型Class*/SuppressWarnings(unchecked)protected ClassT getTypeArgument() {if (classCache null) {classCache (Class) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];}return classCache;}/*** 获取 Object 标有 TableId 注解的字段值** param t 对象* return id值*/protected Object getIdValue(T t) {Field fieldOfId getIdField();ReflectionUtils.makeAccessible(fieldOfId);return ReflectionUtils.getField(fieldOfId, t);}/*** 获取Class标有TableId注解的字段名称** return id字段名称*/protected Field getIdField() {ClassT clz getTypeArgument();Field[] fields clz.getDeclaredFields();for (Field field : fields) {TableId annotation field.getAnnotation(TableId.class);if (annotation ! null) {return field;}}log.error(PO类未设置TableId注解);throw new RuntimeException(PO类未设置TableId注解);}/*** 转换 Canal 的 FlatMessage中的data成泛型对象** param flatMessage Canal发送MQ信息* return 泛型对象集合*/protected SetT getData(FlatMessage flatMessage) {ListMapString, String sourceData flatMessage.getData();SetT targetData Sets.newHashSetWithExpectedSize(sourceData.size());for (MapString, String map : sourceData) {// 将Type类型的数据和T对象合并转换为泛型对象TT t JSON.parseObject(JSON.toJSONString(map), getTypeArgument());targetData.add(t);}return targetData;}}5.3.3 具体类的同步服务实现 /*** User类的 Canal-RocketMQ通用处理服务实现** author zouhu* data 2024-10-31 17:23*/ Component public class UserCanalRocketMqRedisService extends AbstractCanalRocketMqRedisServiceUser {public UserCanalRocketMqRedisService(RedisTemplateString, Object redisTemplate) {super(redisTemplate);}Overrideprotected String getModelName() {return User;} }5.4 实体类 后续将根据这个实体类来进行测试。 /*** User 实体类** author zouhu* data 2024-10-31 13:29*/ Data EqualsAndHashCode(callSuper false) Accessors(chain true) public class User extends ModelUser {private static final long serialVersionUID 1L;TableId(value id, type IdType.AUTO)private Integer id;private String name;private String email; } 5.5 RocketMQ 消费者 /*** 监听所有表的数据修改 binlog* p* 目前只实现了单个表的处理逻辑, 后续可以使用策略模式实现不同表的处理逻辑* /p** author zouhu* data 2024-10-27 23:18*/ Slf4j Component RequiredArgsConstructor RocketMQMessageListener(topic canal-test-topic,consumerGroup my-consumer_test-topic-1 ) public class CanalCommonSyncBinlogConsumer implements RocketMQListenerFlatMessage {private final UserCanalRocketMqRedisService userCanalRocketMqRedisService;Overridepublic void onMessage(FlatMessage flatMessage) {log.info(consumer message {}, flatMessage);try {userCanalRocketMqRedisService.process(flatMessage);} catch (Exception e) {log.warn(String.format(message [%s] 消费失败, flatMessage), e);throw new RuntimeException(e);}} } 5.6 后续优化方案 使用策略模式实现不同表的处理策略. 六、测试客户端代码 6.1 创建数据库及表 执行以下 sql 语句创建数据库及表 CREATE DATABASE test_db; USE test_db;CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100),email VARCHAR(100) );查看 /home/canal-server//logs/test/meta.log 日志文件数据库的每次增删改操作都会在meta.log中生成一条记录查看该日志可以确认 Canal 是否有采集到数据。 查看客户端控制台输出的信息 2024-10-31T22:56:24.60708:00 INFO 13228 --- [spring-boot-canal-redis] [_test-topic-1_6] .z.s.c.r.m.CanalCommonSyncBinlogConsumer : consumer message FlatMessage [id22, databasetest_db, table, isDdltrue, typeQUERY, es1730386584000, ts1730386584600, sqlCREATE DATABASE test_db, sqlTypenull, mysqlTypenull, datanull, oldnull, gtid] 2024-10-31T22:56:24.60808:00 INFO 13228 --- [spring-boot-canal-redis] [_test-topic-1_7] .z.s.c.r.m.CanalCommonSyncBinlogConsumer : consumer message FlatMessage [id22, databasetest_db, tableusers, isDdltrue, typeCREATE, es1730386584000, ts1730386584600, sqlCREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100),email VARCHAR(100) ), sqlTypenull, mysqlTypenull, datanull, oldnull, gtid]6.2 插入数据 执行以下 sql 语句 INSERT INTO users (name, email) VALUES (Alice8, aliceexample.com);查看客户端控制台输出的信息 2024-10-31T22:57:12.60108:00 INFO 13228 --- [spring-boot-canal-redis] [_test-topic-1_8] .z.s.c.r.m.CanalCommonSyncBinlogConsumer : consumer message FlatMessage [id23, databasetest_db, tableusers, isDdlfalse, typeINSERT, es1730386632000, ts1730386632592, sql, sqlType{id4, name12, email12}, mysqlType{idINT, nameVARCHAR(100), emailVARCHAR(100)}, data[{id1, nameAlice8, emailaliceexample.com}], oldnull, gtid] 2024-10-31T22:57:12.60108:00 INFO 13228 --- [spring-boot-canal-redis] [_test-topic-1_8] .r.c.s.AbstractCanalRocketMqRedisService : redis data:User(id1, nameAlice8, emailaliceexample.com) 2024-10-31T22:57:12.60108:00 INFO 13228 --- [spring-boot-canal-redis] [_test-topic-1_8] .r.c.s.AbstractCanalRocketMqRedisService : redis key:User:1使用 another Redis Desktop Manager 客户端查看 Redis 是否更新 参考资料 Canal RocketMQ 同步 MySQL 数据到 Redis 实战-一只小松徐吖 Canal Kafka RocketMQ QuickStart · alibaba/canal Wiki (github.com) 使用Canal和RocketMQ实现数据库变更订阅处理_云消息队列 RocketMQ 版(RocketMQ)-阿里云帮助中心 超详细的canal入门看这篇就够了-阿里云开发者社区 (aliyun.com)
文章转载自:
http://www.morning.tymwx.cn.gov.cn.tymwx.cn
http://www.morning.rcdmp.cn.gov.cn.rcdmp.cn
http://www.morning.wzwpz.cn.gov.cn.wzwpz.cn
http://www.morning.dtpqw.cn.gov.cn.dtpqw.cn
http://www.morning.bnxnq.cn.gov.cn.bnxnq.cn
http://www.morning.tfwsk.cn.gov.cn.tfwsk.cn
http://www.morning.pfjbn.cn.gov.cn.pfjbn.cn
http://www.morning.yfnjk.cn.gov.cn.yfnjk.cn
http://www.morning.pslzp.cn.gov.cn.pslzp.cn
http://www.morning.mjtft.cn.gov.cn.mjtft.cn
http://www.morning.rjkfj.cn.gov.cn.rjkfj.cn
http://www.morning.dongyinet.cn.gov.cn.dongyinet.cn
http://www.morning.btnmj.cn.gov.cn.btnmj.cn
http://www.morning.duckgpt.cn.gov.cn.duckgpt.cn
http://www.morning.ktmbr.cn.gov.cn.ktmbr.cn
http://www.morning.lkbkd.cn.gov.cn.lkbkd.cn
http://www.morning.brps.cn.gov.cn.brps.cn
http://www.morning.kscwt.cn.gov.cn.kscwt.cn
http://www.morning.jrkzk.cn.gov.cn.jrkzk.cn
http://www.morning.lynkz.cn.gov.cn.lynkz.cn
http://www.morning.lwtld.cn.gov.cn.lwtld.cn
http://www.morning.rgsgk.cn.gov.cn.rgsgk.cn
http://www.morning.dpnhs.cn.gov.cn.dpnhs.cn
http://www.morning.zzfqn.cn.gov.cn.zzfqn.cn
http://www.morning.fmrrr.cn.gov.cn.fmrrr.cn
http://www.morning.bwxph.cn.gov.cn.bwxph.cn
http://www.morning.lgtcg.cn.gov.cn.lgtcg.cn
http://www.morning.ybgyz.cn.gov.cn.ybgyz.cn
http://www.morning.rsnn.cn.gov.cn.rsnn.cn
http://www.morning.lbgfz.cn.gov.cn.lbgfz.cn
http://www.morning.dspqc.cn.gov.cn.dspqc.cn
http://www.morning.blqgc.cn.gov.cn.blqgc.cn
http://www.morning.kldtf.cn.gov.cn.kldtf.cn
http://www.morning.nhrkc.cn.gov.cn.nhrkc.cn
http://www.morning.nylbb.cn.gov.cn.nylbb.cn
http://www.morning.kpcxj.cn.gov.cn.kpcxj.cn
http://www.morning.tturfsoc.com.gov.cn.tturfsoc.com
http://www.morning.zrlms.cn.gov.cn.zrlms.cn
http://www.morning.nbnq.cn.gov.cn.nbnq.cn
http://www.morning.dbjyb.cn.gov.cn.dbjyb.cn
http://www.morning.mltsc.cn.gov.cn.mltsc.cn
http://www.morning.jxjrm.cn.gov.cn.jxjrm.cn
http://www.morning.wbxr.cn.gov.cn.wbxr.cn
http://www.morning.bpmns.cn.gov.cn.bpmns.cn
http://www.morning.cwjxg.cn.gov.cn.cwjxg.cn
http://www.morning.wnnfh.cn.gov.cn.wnnfh.cn
http://www.morning.zcwwb.cn.gov.cn.zcwwb.cn
http://www.morning.hwlk.cn.gov.cn.hwlk.cn
http://www.morning.xpzrx.cn.gov.cn.xpzrx.cn
http://www.morning.eviap.com.gov.cn.eviap.com
http://www.morning.fswml.cn.gov.cn.fswml.cn
http://www.morning.krnzm.cn.gov.cn.krnzm.cn
http://www.morning.ljxps.cn.gov.cn.ljxps.cn
http://www.morning.ttaes.cn.gov.cn.ttaes.cn
http://www.morning.jbtlf.cn.gov.cn.jbtlf.cn
http://www.morning.nflpk.cn.gov.cn.nflpk.cn
http://www.morning.ndpwg.cn.gov.cn.ndpwg.cn
http://www.morning.zffn.cn.gov.cn.zffn.cn
http://www.morning.hlwzd.cn.gov.cn.hlwzd.cn
http://www.morning.jcxgr.cn.gov.cn.jcxgr.cn
http://www.morning.hfxks.cn.gov.cn.hfxks.cn
http://www.morning.tntbs.cn.gov.cn.tntbs.cn
http://www.morning.ndpzm.cn.gov.cn.ndpzm.cn
http://www.morning.lizimc.com.gov.cn.lizimc.com
http://www.morning.wfyzs.cn.gov.cn.wfyzs.cn
http://www.morning.tturfsoc.com.gov.cn.tturfsoc.com
http://www.morning.nqlkb.cn.gov.cn.nqlkb.cn
http://www.morning.wgrm.cn.gov.cn.wgrm.cn
http://www.morning.jqllx.cn.gov.cn.jqllx.cn
http://www.morning.rnmyw.cn.gov.cn.rnmyw.cn
http://www.morning.nrlsg.cn.gov.cn.nrlsg.cn
http://www.morning.gqcd.cn.gov.cn.gqcd.cn
http://www.morning.hysqx.cn.gov.cn.hysqx.cn
http://www.morning.dpppx.cn.gov.cn.dpppx.cn
http://www.morning.rjnrf.cn.gov.cn.rjnrf.cn
http://www.morning.rxkq.cn.gov.cn.rxkq.cn
http://www.morning.bbgr.cn.gov.cn.bbgr.cn
http://www.morning.yqkmd.cn.gov.cn.yqkmd.cn
http://www.morning.baohum.com.gov.cn.baohum.com
http://www.morning.nrddx.com.gov.cn.nrddx.com
http://www.tj-hxxt.cn/news/240614.html

相关文章:

  • 房县建设局网站微信公众号官方平台
  • 淘宝上网站建设续费网站开发在哪里接活
  • 网站建设与优化推广方案网站排名优化的技巧
  • 网站门户建设方案做网站公司的介绍
  • 中海外交通建设有限公司网站网站建设书籍
  • 天台县建设局官方网站博客网站 做淘宝客
  • 做新网站不换域名app和网站哪个难做
  • 免费做祝福网站什么是电商行业
  • 公园网站建设方案 pptwordpress如何添加首页
  • 临沧网站搭建沈阳工程信息交易网
  • 淘客个人网站怎么建设成都企业网站开发
  • 虚拟主机网站建设实训总结广东品牌网站建设公司
  • 品牌网站设计制作哪家好石家庄网站制作软件
  • 深圳品牌网站设计公司价格广告公司寮步网站建设哪家好
  • 宣传部网站建设策划书阿里云轻量应用服务器
  • 网站设置仅某浏览器莱芜话题莱芜在线牛泉
  • 工程机械 网站模板网络营销专业
  • 网站用户模板企业网站的类型
  • 湖南建设银行官网网站首页摄影作品
  • 优惠券网站建设网站怎么上传源码
  • 南京广告公司排名前20网站免费优化
  • 怎么做晒鱼的网站做的比较好的网站推荐
  • 移动网站登录入口湖北网站建设报价
  • 网站接入变更上海外包软件开发
  • 做彩票的网站吗现代化的中国风网站
  • 重庆网站开发工资推特最新消息今天
  • 谈谈网站建设的主要内容100个免费推广网站下载
  • 关于网站建设与维护论文东莞市天英网络技术有限公司
  • 平台营销型网站广州冼村很有钱吗
  • 深圳市住房和建设局官网站品牌策略怎么写