ArrayBlockingQueue 阻塞队列 生产者 与消费者案例

 

 

package com.originalityTest;

import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ArrayBlockingQueue;

import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.yqm.nlp.cn.seg.ISegTagger;
import org.yqm.nlp.cn.seg.impl.CharNgramSegTagger;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ServerAddress;
import com.originalityTest.Test.Consumer;
import com.originalityTest.Test.Producer;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import us.codecraft.background.entity.KeywordDetailed;
import us.codecraft.background.solr.SolrService;
import us.codecraft.background.solr.VSMTextSimilarity;
import us.codecraft.webmagic.main.CollectInterface;
import us.codecraft.webmagic.main.testMain;
import us.codecraft.webmagic.model.samples.iask.IaskQuestionModel;
import us.codecraft.webmagic.utils.HttpUtils;
import us.codecraft.webmagic.utils.MongoUtils;

/**
 * 
 *-----------------------------------------------------------------------------
 * <br>Copyright (c)  2018   深圳问我时代科技有限公司
 *   
 * <p>跑360采集数据跑SEO质量得分 </p>
 * 
 * @project name    : webmagic-samples
 * @package name    : com.originalityTest
 * @file name        : RunJob.java  
 * @author           : flm  
 * @date              : 2018年10月29日  <br>
 *
 *-----------------------------------------------------------------------------
 */
public class RunJob {

    protected static String host = "192.168.1.90"; //192.168.9.40:30000
    
    protected static int port = 30000;
    protected static String dbname = "5118baiduzhidao";
    protected static DB mongoDB = null;
    protected static DB mongoDBURL = null;
    protected static boolean isTestFlag = false;
    protected static int initDate = 1000*60*10;
    

    private int queueSize = 10000000;
    private ArrayBlockingQueue<BasicDBObject> queue = new ArrayBlockingQueue<BasicDBObject>(queueSize);
    
    static {
        MongoClientOptions.Builder buide = new MongoClientOptions.Builder();
        buide.connectionsPerHost(100);// 与目标数据库可以建立的最大链接数
        buide.connectTimeout(1000 * 60 * 20);// 与数据库建立链接的超时时间
        buide.maxWaitTime(100 * 60 * 5);// 一个线程成功获取到一个可用数据库之前的最大等待时间
        buide.threadsAllowedToBlockForConnectionMultiplier(100);
        buide.maxConnectionIdleTime(0);
        buide.maxConnectionLifeTime(0);
        buide.socketTimeout(0);
        buide.socketKeepAlive(true);
        MongoClientOptions myOptions = buide.build();
        try {
            MongoClient  mongoClient = new MongoClient(new ServerAddress(host, port), myOptions);
            mongoDB = mongoClient.getDB(dbname);
            mongoDBURL =  mongoClient.getDB("seo_keyword");
        } catch (UnknownHostException e) {
            e.printStackTrace();
            System.exit(0);
        }
        
    }
    /**
     * 手动执行方法
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
        RunJob runJob = new RunJob();
        Producer producer = runJob.new Producer();
        Consumer consumer1 = runJob.new Consumer(1);
        Consumer consumer2 = runJob.new Consumer(2);
        Consumer consumer3 = runJob.new Consumer(3);
        Consumer consumer4 = runJob.new Consumer(4);
        Consumer consumer5 = runJob.new Consumer(5);
        Consumer consumer6 = runJob.new Consumer(6);
        Consumer consumer7 = runJob.new Consumer(7);
        Consumer consumer8 = runJob.new Consumer(8);
        Consumer consumer9 = runJob.new Consumer(9);
        Consumer consumer10 = runJob.new Consumer(10);
        // 生产数据
        producer.start();
        
        // 跑数据原创度
        consumer1.start();
        consumer2.start();
        consumer3.start();
        consumer4.start();
        consumer5.start();
        consumer6.start();
        consumer7.start();
        consumer8.start();
        consumer9.start();
        consumer10.start();
    }
    
    
    
    
    
    
    class Consumer extends Thread{
        int i;
        public Consumer(int i){
            this.i = i;
        }
        @Override
        public void run() {
            consume();
        }
         
        private void consume() {
            while(true){
                try {
                    System.out.println("队列获取   队列i:"+i);
                    DBCollection collQuestion = mongoDB.getCollection("soQA");
                    DBCollection collection = mongoDBURL.getCollection("domain");
                    
                    BasicDBObject d = queue.take();
                    
                    List<DBObject> answers=   (List<DBObject>) d.get("answers");
                    String questionTxt = d.getString("title") + d.getString("quest");
                    
                    String questionTitle = "";
                    if(d.getString("title")!=null&&d.getString("title")!=""){
                        questionTitle = d.getString("title");
                    }else{
                        questionTitle = d.getString("quest");
                    }
                    
                    float score = 0F;
                    
                    float answerLenOriginality = OriginalityUtitls.getAnswerLenOriginality(answers);
                    float answerSizeOriginality = OriginalityUtitls.getAnswerrSizeOriginality(answers);
                    float goodOriginality = OriginalityUtitls.getGoodOriginality(answers);
                    float questionOriginality = OriginalityUtitls.getQuestionOriginality(questionTxt, answers);
                    float titleOriginality = OriginalityUtitls.getTitleOriginality(questionTitle);
                    float wenwoOriginality = OriginalityUtitls.getWenwoOriginality(questionTitle, collection);
                    
                    score += Float.valueOf(questionOriginality*0.3+"");
                    score += Float.valueOf(answerLenOriginality*0.2+"");
                    score += Float.valueOf(answerSizeOriginality*0.1+"");
                    score += Float.valueOf(goodOriginality*0.05+"");
                    score += Float.valueOf(titleOriginality*0.2+"");
                    score += Float.valueOf(titleOriginality*0.2+"");
                    score += Float.valueOf(wenwoOriginality*0.1+"");
                    System.out.println("score :"+score);
                    
                    d.put("originality", score);
                    d.put("run", 0);
                    collQuestion.save(d);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
     
    
    
    class Producer extends Thread{
        @Override
        public void run() {
            produce();
        }
         
        private void produce() {
            try {
                DBCollection collQuestion = mongoDB.getCollection("soQA");
                
                DBObject idQuery = new BasicDBObject();
                idQuery.put("state",1);
                DBCursor lists = collQuestion.find(idQuery);
                lists.addOption(com.mongodb.Bytes.QUERYOPTION_NOTIMEOUT); 
                int i = 0;
                while(lists.hasNext()){
                    BasicDBObject d = (BasicDBObject)lists.next(); 
                    queue.put(d);
                    System.out.println((++i)+"条记录       ,向队列取中插入一个元素,队列剩余空间:"+(queueSize-queue.size()));
                    
                    try {
                        Thread.sleep(500);        // 控制生产速度,防止队列满
                    } catch (Exception e) {
                        System.err.println("Thread.sleep.....");
                    }
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    
    
}

 

posted @ 2018-10-29 16:40  低调人生  阅读(1042)  评论(0编辑  收藏  举报