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连接的更多相关文章

  1. chrome 浏览器的预提取资源机制导致的一个请求发送两次的问题以及ClientAbortException异常

    调查一个 pdf 打印报错: ExceptionConverter: org.apache.catalina.connector.ClientAbortException: java.net.Sock ...

  2. #在FLAT模式下,需要设置flat子网,VM的IP从这个设置的子网中抓取,这时flat_injected需要设置为True,系统才能自动获得IP,如果flat

    #在FLAT模式下,需要设置flat子网,VM的IP从这个设置的子网中抓取,这时flat_injected需要设置为True,系统才能自动获得IP,如果flat子网和主机网络是同一网络,网络管理员要注 ...

  3. Python爬虫 -- 抓取电影天堂8分以上电影

    看了几天的python语法,还是应该写个东西练练手.刚好假期里面看电影,找不到很好的影片,于是有个想法,何不搞个爬虫把电影天堂里面8分以上的电影爬出来.做完花了两三个小时,撸了这么一个程序.反正蛮简单 ...

  4. Python 爬取美女图片,分目录多级存储

    最近有个需求:下载https://mm.meiji2.com/网站的图片. 所以简单研究了一下爬虫. 在此整理一下结果,一为自己记录,二给后人一些方向. 爬取结果如图:   整体研究周期 2-3 天, ...

  5. Python爬取信息管理系统计算学分绩点

    试手登录了下我们学校的研究生信息管理系统,自动计算学分绩点 # -*- coding:utf-8 -*- import urllib import urllib2 import re import c ...

  6. 爬虫如何发现更多的url呢,怎么动态收集新的url连接

    大家在做爬虫采集数据的时候很多都会遇到增量采集的问题,有些时候是通过过滤url来进行的,有些是通过爬取网页后再进行分析判断, 以上这些过程也许大部分做爬虫的都会这么做,各位有没有想过, 除了以上的常用 ...

  7. POJ 1182食物链(分集合以及加权两种解法) 种类并查集的经典

    题目链接:http://icpc.njust.edu.cn/Problem/Pku/1182/ 题意:给出动物之间的关系,有几种询问方式,问是真话还是假话. 定义三种偏移关系: x->y 偏移量 ...

  8. 求取水仙花数 && 将整数分解成质因数

    [程序3] 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如: 153是一个"水仙花数", ...

  9. Python 爬虫:把廖雪峰教程转换成 PDF 电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天尝试写一个爬虫,将廖雪峰老师的 ...

随机推荐

  1. Dubbo系列之 (一)SPI扩展

    一.基础铺垫 1.@SPI .@Activate. @Adaptive a.对于 @SPI,Dubbo默认的特性扩展接口,都必须打上这个@SPI,标识这是个Dubbo扩展点.如果自己需要新增dubbo ...

  2. Java基础—控制流程语句(条件语句与循环结构)

    与任何程序设计语言一样,Java使用条件语句和循环结构确定控制流程.Java的控制流程结构与C和C++的控制流程机构一样,只有很少的例外情况.没有goto语句,但break语句可以带标签,可以利用它实 ...

  3. pytorch载入模型的参数总是变化,比如说某个conv(3,3)kernel的几个参数总是变化:

  4. java从零到变身爬虫大神

    刚开始先从最简单的爬虫逻辑入手 爬虫最简单的解析面真的是这样 import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import java. ...

  5. C#LeetCode刷题,走进Google,走近人生

    概述 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/1015 访问. 本系列博文将会向大家展示我在LeetCode上的刷 ...

  6. C#LeetCode刷题之#594-最长和谐子序列​​​​​​​​​​​​​​(Longest Harmonious Subsequence)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3800 访问. 和谐数组是指一个数组里元素的最大值和最小值之间的差 ...

  7. Spring Boot 教程 - MyBatis-Plus

    1. Mybatis-Plus简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 为什么说Myba ...

  8. 树莓派 4B VNC Viewer 显示 cannot currently show the desktop 的解决方法 (图文)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/ZChen1996/article/de ...

  9. MQC集群配置错误

    这个错误说明配置里面,MQC环境配置错了 运行war包时会读到本地的配置system-config.propertites文件

  10. Pytorch_第十篇_卷积神经网络(CNN)概述

    卷积神经网络(CNN)概述 Introduce 卷积神经网络(convolutional neural networks),简称CNN.卷积神经网络相比于人工神经网络而言更适合于图像识别.语音识别等任 ...