基于分布式组件的全国城镇天气自动更新API的开发

一、开发说明

本项目的开发一方面是为了学习SpringBoot,一方面是为了学习Java体系中各个组件的底层通信原理。所以我在这两周的时间内开发并重构了现有的其他人的应用。本项目参考于:https://www.zifangsky.cn/1271.html。这是个编程前辈的智慧结晶。本次项目只是实践学习,不用于商业。

源码:https://gitee.com/sutton/weatherspider/tree/master

技术依赖:

  • SpringBoot:项目的基本架构,基本的Web服务和定时调度服务
  • Maven:项目版本管理和自动构建
  • MyBatis:ORM框架
  • WebMagic:爬虫框架,用于爬取城镇天气和代理的IP。
  • Kafka:用于应用的解耦,在本次项目中Kafka集群的作用有
    • 通过消息队列将爬虫模块与检测代理IP有效性的模块解耦
    • 通过消息队列将IP定时更新模块与检测代理IP有效性的模块解耦
    • 通过消息队列将天气爬虫模块与Weather服务解耦
    • 以上解耦将使对数据库的读和写分离
  • Dubbo:RPC框架,提供IP读取和天气读取的远程方法调用
  • Zookeeper:Kafka的配置注册中心和Dubbo的配置注册中心。两个注册中心可分离
  • Zuul:用于服务路由的请求转发
  • Docker:应用程序的部署和组件的部署

环境:

  • JDK 8+
  • MySQL5.7+
  • SpringBoot 2.0.2.RELEASE
  • Netflix Zuul 1.4.0.RELEASE

项目架构图:

项目结构图:

二、开发过程

1.基本组件的配置。

采用Docker配置Kafka和Zookeeper。这里有一篇基本的文章可用于参考:https://my.oschina.net/lhztt/blog/791664

在Kafka中添加两个topic:iptopic和weathertopic,(命名可能存在问题)。

2.代理IP爬虫的开发

采用Spring的定时模块来定时调用webmagic爬虫爬取免费代理网站上的IP和端口,然后将IP和端口组成ProxyIP,然后将这个对象采用gson序列化之后,发送给kafka集群中的iptopic主题。

3. IP消息队列订阅者的开发

(1)消息订阅者接受iptopic的消息,然后将这些消息通过gson反序列之后,采用java工具访问IP检查网站查看网站是否可用之后,如果可用就插入数据库。

(2)同时接受来自IP模块的定时检查代理IP是否可用的消息,同样访问IP检查网站检查可用之后插入数据库。

4.IP服务API的开发

IP服务API提供两个接口,一个是随机从数据库选择一个可用的IP,一个是从代理IP数据库中选择所有的代理IP

5.IP服务的开发

提供远程调用接口的实现。

定时读取代理IP数据库中的代理IP,通过消息队列的方式发送给IP消息订阅者以检查代理IP的可用性

6. IP EdgeService的开发

远程调用IP服务的接口,并可采用可视化界面显示IP服务返回的数据。提供REST接口以供客户端调用

7. 天气爬虫

接收来自天气服务模块的消息,并定时爬取天气网上的数据。

8. 天气服务API

天气服务API提供两个待实现的接口

(1)根据城镇的编号返回天气

(2)根据城镇的名称返回天气(模糊查询)

9. 天气服务

实现从天气数据库中读取数据返回给Weather EdgeService

定时将待更新的城镇编号发送给天气爬虫,天气爬虫接受消息之后爬取对应城镇的天气。

10.Weather EdgeService的开发

远程调用Weather服务的接口,提供REST接口以供客户端调用。

11. API 网关

采用application.yml的配置将客户端的请求进行转发

三、项目的部署

项目可以采用Docker的方式快速部署项目。部署示例:

https://segmentfault.com/a/1190000014391513

后续可能会提供对应的Dockerfile

 

 

 

 

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值