Agumaster 将爬虫取股票名称代号子系统分出来成agumaster_crawler, 两系统通过RabbitMq连接
agumaster_crawler系统负责启动爬虫取得数据,之后便往队列中推送.
agumaster_crawler系统中pom.xml关于RabbitMq的依赖是:
<!-- RabbitMq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
agumaster_crawler系统中application.properties文件里对于RabbitMq的设置是:
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
之后,就可以把Sender类写出来:
package com.heyang.agumasterCrawler; import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; @Component
public class Sender {
@Autowired
private AmqpTemplate mqTlt; public void send(String msg) {
this.mqTlt.convertAndSend("stockQueue",msg);
}
}
具体使用Sender类的JUnit测试函数:
@SpringBootTest
class AgumasterCrawlerApplicationTests {
@Autowired
private Sender sender; @Test
void contextLoads() throws Exception {
BaseCrawler crawler=new FenghuangCrawler();
List<Stock> stockList=crawler.getStockList();
ObjectMapper mapper = new ObjectMapper(); for(Stock s:stockList) {
String str=mapper.writeValueAsString(s);
this.sender.send(str);
}
}
}
发送给完毕后,RabbitMq队列的情况:

三千八百零一支股票都送到了.
而原有Agumaster系统中,也要添加RabbitMq的依赖,
<!-- RabbitMq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
这个和上面的是一样的.
之后就可以写接收类了:
package com.ufo.hy.agumaster.mq; import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component; /**
* Used to receive stock code/names
* @author Heyang
*
*/
@Component
@RabbitListener(queues="stockQueue")
public class Receiver {
@RabbitHandler
public void QueueReceive(String receivedMsg) {
System.out.println(receivedMsg);
}
}
这个类在工程Agumaster启动后便会去队列里取得消息回来,下面是部分它取得的消息:
{"id":2790,"code":"600538","name":"国发股份","utime":null,"src":null,"ctime":null}
{"id":2791,"code":"002367","name":"康力电梯","utime":null,"src":null,"ctime":null}
{"id":2792,"code":"600410","name":"华胜天成","utime":null,"src":null,"ctime":null}
{"id":2793,"code":"601007","name":"金陵饭店","utime":null,"src":null,"ctime":null}
{"id":2794,"code":"603955","name":"大千生态","utime":null,"src":null,"ctime":null}
{"id":2795,"code":"300227","name":"光韵达","utime":null,"src":null,"ctime":null}
{"id":2796,"code":"603195","name":"公牛集团","utime":null,"src":null,"ctime":null}
{"id":2797,"code":"000726","name":"鲁 泰A","utime":null,"src":null,"ctime":null}
{"id":2798,"code":"002013","name":"中航机电","utime":null,"src":null,"ctime":null}
{"id":2799,"code":"002868","name":"绿康生化","utime":null,"src":null,"ctime":null}
{"id":2800,"code":"002558","name":"巨人网络","utime":null,"src":null,"ctime":null}
{"id":2801,"code":"002391","name":"长青股份","utime":null,"src":null,"ctime":null}
{"id":2802,"code":"300010","name":"立思辰","utime":null,"src":null,"ctime":null}
{"id":2803,"code":"000902","name":"新洋丰","utime":null,"src":null,"ctime":null}
{"id":2804,"code":"601965","name":"中国汽研","utime":null,"src":null,"ctime":null}
{"id":2805,"code":"300171","name":"东富龙","utime":null,"src":null,"ctime":null}
{"id":2806,"code":"300406","name":"九强生物","utime":null,"src":null,"ctime":null}
{"id":2807,"code":"600857","name":"宁波中百","utime":null,"src":null,"ctime":null}
{"id":2808,"code":"002463","name":"沪电股份","utime":null,"src":null,"ctime":null}
{"id":2809,"code":"002560","name":"通达股份","utime":null,"src":null,"ctime":null}
....
这样做,就用消息系统完成了系统的部分解耦.
--2020年5月9日--
Agumaster 将爬虫取股票名称代号子系统分出来成agumaster_crawler, 两系统通过RabbitMq连接的更多相关文章
- chrome 浏览器的预提取资源机制导致的一个请求发送两次的问题以及ClientAbortException异常
调查一个 pdf 打印报错: ExceptionConverter: org.apache.catalina.connector.ClientAbortException: java.net.Sock ...
- #在FLAT模式下,需要设置flat子网,VM的IP从这个设置的子网中抓取,这时flat_injected需要设置为True,系统才能自动获得IP,如果flat
#在FLAT模式下,需要设置flat子网,VM的IP从这个设置的子网中抓取,这时flat_injected需要设置为True,系统才能自动获得IP,如果flat子网和主机网络是同一网络,网络管理员要注 ...
- Python爬虫 -- 抓取电影天堂8分以上电影
看了几天的python语法,还是应该写个东西练练手.刚好假期里面看电影,找不到很好的影片,于是有个想法,何不搞个爬虫把电影天堂里面8分以上的电影爬出来.做完花了两三个小时,撸了这么一个程序.反正蛮简单 ...
- Python 爬取美女图片,分目录多级存储
最近有个需求:下载https://mm.meiji2.com/网站的图片. 所以简单研究了一下爬虫. 在此整理一下结果,一为自己记录,二给后人一些方向. 爬取结果如图: 整体研究周期 2-3 天, ...
- Python爬取信息管理系统计算学分绩点
试手登录了下我们学校的研究生信息管理系统,自动计算学分绩点 # -*- coding:utf-8 -*- import urllib import urllib2 import re import c ...
- 爬虫如何发现更多的url呢,怎么动态收集新的url连接
大家在做爬虫采集数据的时候很多都会遇到增量采集的问题,有些时候是通过过滤url来进行的,有些是通过爬取网页后再进行分析判断, 以上这些过程也许大部分做爬虫的都会这么做,各位有没有想过, 除了以上的常用 ...
- POJ 1182食物链(分集合以及加权两种解法) 种类并查集的经典
题目链接:http://icpc.njust.edu.cn/Problem/Pku/1182/ 题意:给出动物之间的关系,有几种询问方式,问是真话还是假话. 定义三种偏移关系: x->y 偏移量 ...
- 求取水仙花数 && 将整数分解成质因数
[程序3] 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如: 153是一个"水仙花数", ...
- Python 爬虫:把廖雪峰教程转换成 PDF 电子书
写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天尝试写一个爬虫,将廖雪峰老师的 ...
随机推荐
- SpringBoot常用配置,引入外部配置文件信息,热加载
SpringBoot的配置文件格式 yml规范 SpringBoot的配置文件支持properties和yml,甚至还支持json. 更推荐使用yml文件格式: yml文件,会根据换行和缩进帮助咱们管 ...
- SpringCloud Sidecar 整合.Net WebApi
在整合.Net的过程中遇到不少问题,一般网上的例子只是调用一个简单的NodeJS示例,并未有详细的介绍及采坑过程. 首先,我的项目结构是:Vue前端 + SpringCloud后端 + .Net的We ...
- 手写AOP实现过程
一.手写Aop前基础知识 1.aop是什么? 面向切面编程(AOP):是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行OOP开发时,都是基于对组件(比如类)进行开 ...
- java面试的一些问题
面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码 ...
- List 集合的操作
如果当前id存在集合里 去除当前id 如果不在集合里 去除集合最后一个结果Long videoId = 0l; // 当前 IDList<VideoZoneReturnBean> ...
- Vue中 props 这些知识点
如果你一直在阅读有关"props"内容,你会发现我们可能也一直在使用它们(即使没有意识到),但也许你并不完全确定它们是什么.或者如何正确使用它们,并充分利用它们. 当你读完这篇指南 ...
- Node.js简易服务器,配合type="module" 实现html文件script标签 ES module引入模块
相信大家在测试type="module" 在html文件中直接模块化引入 js时,会出现一个跨域问题. 当我们将<script ></scirpt> 标签t ...
- 同事不太懂负载均衡,我直接把阿里架构师的这份Nginx笔记甩给他
Nginx功能强大,架构复杂,学习.维护和开发的门槛较高. 本份笔记深入最新的Nginx源码,详细剖析了模块体系.动态插件.功能框架.进程模型.事件驱动.线程池.TCP/UDP/HTTP 处理等Ngi ...
- centos7下安装docker与镜像加速
1.背景 centos7下安装docker 2.安装 第一步:检查是否为centos7版本 第二步:依赖环境安装 执行如下两个命令: yum -y install gcc yum -y install ...
- 旧 WCF 项目成功迁移到 asp.net core web api
背景 接上一篇,放弃了 asp.net core + gRPC 的方案后,我灵光一闪,为什么不用 web api 呢?不也是 asp.net core 的吗?虽然 RESTful 不是强约束,客户端写 ...