发送方:

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

  1. 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 ...

  2. iOS面试题汇总

    摘要:1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承;可以实现多个接口,通 ...

  3. spring技术核心概念纪要

    一.背景 springframework 从最初的2.5版本发展至今,期间已经发生了非常多的修正及优化.许多新特性及模块的出现,使得整个框架体系显得越趋庞大,同时也带来了学习及理解上的困难. 本文阐述 ...

  4. 超全!iOS 面试题汇总

    之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家.(题目来源于网络,侵删) 1. Object-c的类可以多重继承么?可以实现多个接口么?Cat ...

  5. iOS开发——面试总结(一)

    面试总结(一) 通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题: 1.搞清楚touch事件的传递(事件的响应链) 事件的响应(responder chain) 只有继承了UIRespon ...

  6. iOS 必备技术点

    IOS面试问题总结 分类: IOS开发2013-11-20 17:26 5873人阅读 评论(1) 收藏 举报   目录(?)[+]   通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题: ...

  7. IOS面试问题总结

    IOS面试问题总结 分类: IOS开发2013-11-20 17:26 10458人阅读 评论(1) 收藏 举报   目录(?)[+]   通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题 ...

  8. iOS 面试题汇总

    1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承;可以实现多个接口,通过实现 ...

  9. 见过的最全的iOS面试题

    之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家.(题目来源于网络,侵删) 1. Object-c的类可以多重继承么?可以实现多个接口么?Cat ...

随机推荐

  1. spring时遇到的小问题

    最近在学习spring的时候遇到了两个小问题,在此总结一下 1.少导了所需要的包 运行测试程序,报出以下错误. 初步分析,得知是dataSource数据源没有创建成功,以为dataSource配置文件 ...

  2. vue_如何判断变量是数组还是对象

    一.typeof判断数据类型(判断数组跟对象都返回object) console.log(typeof null); // "object" console.log(typeof ...

  3. 解决@ResponseBody不能和 <mvc:annotation-driven>同时使用的问题

    我们都知道使用Springmvc的ajax很强大只要三步就可以实现: 1.引入jackson的maven到pom文件: <dependency> <groupId>com.fa ...

  4. java线程的五大状态,阻塞状态详解

    一.状态简介 一个线程的生命周期里有五大状态,分别是: 新生 就绪 运行 死亡 运行后可能遇到的阻塞状态 二.相关方法 2.1 新生状态 Thread t = new Thread(); 正如我们前面 ...

  5. 修改linux 动态ip为静态ip

    vi /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO=static 设置网卡引导协议为 静态 ONBOOT=yes 网卡开机自启动 配置[IP ...

  6. vant官网无法打开,这里教你解决

    是否大家和我一样,vant-weapp官网突然打不开了   像这样: 但我发现在码云上有一个国内的版本 https://vant-contrib.gitee.io/vant/#/zh-CN/home, ...

  7. 在laravel中遇到并发的解决方案

    1,在mysql中创建唯一索引,在代码中try catch mysql的1062错误 2.将存在并发的代码丢给队列异步处理.这种解决方案的问题是,接下来的代码不能依赖队列的处理结果 3.使用mysql ...

  8. github 加速方法

    登录网址:https://github.com.ipaddress.com/codeload.github.com#ipinfo 更改hosts:

  9. Centos7 Minimal 版安装后安装图形界面教程

    1.执行下面命令安装GNOME Desktop Environment yum -y groups install "GNOME Desktop" 2.安装完成后,执行下面的命令, ...

  10. Jmeter+Ant+jenkins实现api自动化测试的持续集成

    0基础上手教程 @jmeter的使用 jmeter是一个基于java语言编写的开源测试工具,广泛应用于接口测试,性能测试,自动化测试. 接口自动化的编写教程,将于后续分享. 问题一:为什么用ant,而 ...