Sender(agumaster_crawler)->RabbitMq->Reciever(agumaster)
发送方:
package com.heyang.agumasterCrawler; import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import com.fasterxml.jackson.databind.ObjectMapper;
import com.heyang.agumasterCrawler.codename.BaseCodeNameCrawler;
import com.heyang.agumasterCrawler.codename.FenghuangCrawler;
import com.heyang.agumasterCrawler.entity.Stock;
import com.heyang.agumasterCrawler.entity.StockBundle;
import com.heyang.agumasterCrawler.sender.Sender; @SpringBootApplication
public class AgumasterCrawlerApplication implements CommandLineRunner {
@Autowired
private Sender sender=null; @Override
public void run(String... args) throws Exception {
BaseCodeNameCrawler crawler=new FenghuangCrawler();
List<Stock> stockList=crawler.getStockList(); StockBundle sb=new StockBundle();
sb.setSource("凤凰财经");
sb.setCount(stockList.size());
sb.setStockList(stockList);
sb.setType("stock"); ObjectMapper mapper = new ObjectMapper(); String str=mapper.writeValueAsString(sb);
this.sender.send("stockQueue",str);
} public static void main(String[] args) {
SpringApplication.run(AgumasterCrawlerApplication.class, args);
}
}
传到MQ的消息:
{"type":"stock","source":"凤凰财经","count":3791,"stockList":[{"id":0,"code":"688466","name":"N金科"},{"id":1,"code":"000825","name":"太钢不锈"},{"id":2,"code":"300022","name":"吉峰科技"},{"id":3,"code":"002536","name":"飞龙股份"},{"id":4,"code":"300459","name":"金科文化"},{"id":5,"code":"00240...
]}
接收方:
package com.ufo.hy.agumaster.mq; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ufo.hy.agumaster.entity.Stock;
import com.ufo.hy.agumaster.service.StockService; /**
* Used to receive stock code/names
* @author Heyang
*
*/
@Component
@RabbitListener(queues="stockQueue")
public class Receiver {
private final Logger logger = LoggerFactory.getLogger(Receiver.class); @Autowired
protected StockService stkService=null; @RabbitHandler
public void QueueReceive(String receivedMsg) {
logger.info("Got mas:"+receivedMsg);
ObjectMapper mapper = new ObjectMapper(); try {
JsonNode node = mapper.readTree(receivedMsg);
String type=node.get("type").asText(); if("stock".equals(type)) {
JsonNode listNode=node.path("stockList");
String source=node.get("source").asText();
String count=node.get("count").asText();
logger.info("Got {} stocks from {}.",count,source); // 遍历list节点的子节点
List<Stock> stockList=new ArrayList<Stock>();
Iterator<JsonNode> iterator = listNode.elements();
while (iterator.hasNext()) {
JsonNode stock = iterator.next();
String code=stock.get("code").asText();
String name=stock.get("name").asText(); stockList.add(new Stock(0,code,name));
} int[] arr=stkService.batchUpdate(stockList,source,null);
int inserted=arr[0],updated=arr[1]; logger.info("Updated {},inserted {}.",updated,inserted);
} }catch(Exception ex) {
ex.printStackTrace();
}
}
}
Sender(agumaster_crawler)->RabbitMq->Reciever(agumaster)的更多相关文章
- Amqp整合com.rabbitmq.client.ShutdownSignalException: channel error; protocol method异常处理
java.io.IOException at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:126) at com.rabbitmq ...
- iOS面试题汇总
摘要:1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承;可以实现多个接口,通 ...
- spring技术核心概念纪要
一.背景 springframework 从最初的2.5版本发展至今,期间已经发生了非常多的修正及优化.许多新特性及模块的出现,使得整个框架体系显得越趋庞大,同时也带来了学习及理解上的困难. 本文阐述 ...
- 超全!iOS 面试题汇总
之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家.(题目来源于网络,侵删) 1. Object-c的类可以多重继承么?可以实现多个接口么?Cat ...
- iOS开发——面试总结(一)
面试总结(一) 通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题: 1.搞清楚touch事件的传递(事件的响应链) 事件的响应(responder chain) 只有继承了UIRespon ...
- iOS 必备技术点
IOS面试问题总结 分类: IOS开发2013-11-20 17:26 5873人阅读 评论(1) 收藏 举报 目录(?)[+] 通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题: ...
- IOS面试问题总结
IOS面试问题总结 分类: IOS开发2013-11-20 17:26 10458人阅读 评论(1) 收藏 举报 目录(?)[+] 通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题 ...
- iOS 面试题汇总
1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承;可以实现多个接口,通过实现 ...
- 见过的最全的iOS面试题
之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家.(题目来源于网络,侵删) 1. Object-c的类可以多重继承么?可以实现多个接口么?Cat ...
随机推荐
- js 排他思想案例
<!-- 排他思想 --> <button>按钮1</button> <button>按钮2</button> <button> ...
- Weblogic 连接 RMI 服务报错 Connection refused
WebLogic 连接 RMI 服务报错 Connection refused 访问 WebLogic RMI 服务报错,连接被拒绝,连接超时. 奇怪的是,报错的 host 根本不是我要访问的. 报错 ...
- 每日一道 LeetCode (9):实现 strStr()
每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...
- 当你的系统依赖于某个bug...
标题粗略看是有点违反常识的,bug通常是指某些代码存在问题导致系统没有按照期望方式工作,应该是需要尽可能被修复的,这样系统才会正常工作.但是,开发实践中会发现在某些情况下,本来功能没有问题,在你信心满 ...
- C#算法设计查找篇之02-二分查找
二分查找(Binary Search) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/699 访问. 二分查找也称折半查 ...
- Homekit_Dohome_智能插座
简介: 本款智能插座有三个版本可供选择,分别为Homekit版本,涂鸦版本,Dohome版本,各个版本的区别如下: DoHome版特点: 支持HomeKit 支持Amazon 支持Google ...
- 性能分析(6)- 如何迅速分析出系统 CPU 的瓶颈在哪里
性能分析小案例系列,可以通过下面链接查看哦 https://www.cnblogs.com/poloyy/category/1814570.html 前言 在做性能测试时,我们会需要对 Linux 系 ...
- 第一次使用Git Bash Here 将本地代码上传到码云
当我们安装成功git工具时候,初次使用Git时,需要Git进行配置. 1.点击桌面上的这个图标,打开Git Bash:如图所示 2.配置自己的用户名和邮箱 git config --global us ...
- 使用Spring Boot开发者工具进行自动重启和页面自动刷新
简介 大家可能都听说过开发Node.js应用时可以使用多种工具对开发者提供便利,如WebPack提供了开发者服务器来支持js应用动态更替,并在保存文件时自动刷新浏览器.Spring Boot也提供了相 ...
- 【ZJOI2007】棋盘制作 - 悬线法
题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个 \(8 \times 8\) 大小的黑白相间的方阵,对应八八六十四卦 ...