admin
2022-08-25 264b5dea5b74c4b5ba54a90caba7e709858a037e
增加rabbitmq
1个文件已删除
17个文件已修改
5个文件已添加
639 ■■■■ 已修改文件
pom.xml 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/parser/HomeParser.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/log/KafkaAppender.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/ResourceVideoService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/VideoInfoService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/ad/DeviceAdStrategyServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/juhe/FunTV2ServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/juhe/Iqiyi2ServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/inter/ad/DeviceAdStrategyService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/manager/search/SolrAlbumVideoDataManager.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/Constant.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/SpringContext.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/mq/CMQManager.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/mq/consumer/QueueHelloWorldListener.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/consumer.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/env-dev/logback.xml 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/env-dev/rabbitmq.properties 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/env-pro/logback.xml 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/env-pro/rabbitmq.properties 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/spring-rabbitmq-consumer.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/spring-rabbitmq-producer.xml 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/IPTest.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/Iqiyi2.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -900,6 +900,42 @@
            <version>2.0.1</version>
        </dependency>
        <!-- 腾讯云日志采集CLS -->
        <dependency>
            <groupId>com.tencentcloudapi.cls</groupId>
            <artifactId>tencentcloud-cls-logback-appender</artifactId>
            <version>1.0.3</version>
            <exclusions>
                <!--<exclusion>-->
                    <!--<groupId>ch.qos.logback</groupId>-->
                    <!--<artifactId>*</artifactId>-->
                <!--</exclusion>-->
                <!--<exclusion>-->
                    <!--<groupId>org.slf4j</groupId>-->
                    <!--<artifactId>*</artifactId>-->
                <!--</exclusion>-->
                <!--<exclusion>-->
                    <!--<groupId>joda-time</groupId>-->
                    <!--<artifactId>*</artifactId>-->
                <!--</exclusion>-->
                <!--<exclusion>-->
                    <!--<groupId>com.google.protobuf</groupId>-->
                    <!--<artifactId>protobuf-java</artifactId>-->
                <!--</exclusion>-->
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit</artifactId>
            <version>2.3.1</version>
        </dependency>
    </dependencies>
src/main/java/com/yeshi/buwan/controller/parser/HomeParser.java
@@ -713,6 +713,11 @@
                    return;
                } else if (fromType == HomeVideo.FROM_TYPE_INTERNET) {
                    getVideoDetailForInternetSearch(acceptData, videoId, request, out);
                    //VIVO 渠道每日广告最多展示一次
                    if ("vivo".equalsIgnoreCase(acceptData.getChannel())) {
                        deviceAdStrategyService.setFSAShowTomorrow(acceptData.getUtdId(), acceptData.getDetailSystem().getId());
                    }
                    return;
                }
            }
@@ -906,6 +911,10 @@
            out.print(JsonUtil.loadTrueJson(StringUtil.outPutResultJson(new VideoDetailVO(Utils.convertVideo(info), deviceAdStrategyService.getVideoDetailAdStrategy(acceptData.getUtdId(), acceptData.getDetailSystem().getId(), acceptData.getVersion(), acceptData.getChannel(), loginUid, videoId, from), attention, sessionId)), array.toString(),
                    obj.toString()));
            //VIVO 渠道每日广告最多展示一次
            if ("vivo".equalsIgnoreCase(acceptData.getChannel())) {
                deviceAdStrategyService.setFSAShowTomorrow(acceptData.getUtdId(), acceptData.getDetailSystem().getId());
            }
        } else {
            out.print(JsonUtil.loadTrueJson(StringUtil.outPutResultJson(Utils.convertVideo(info)), array.toString(),
                    obj.toString()));
src/main/java/com/yeshi/buwan/log/KafkaAppender.java
File was deleted
src/main/java/com/yeshi/buwan/service/imp/ResourceVideoService.java
@@ -68,6 +68,7 @@
     * @param videoId
     * @return
     */
    @Transactional
    public List<ResourceVideo> getResourceList(String videoId) {
        List<VideoInfo> videoInfoList = new ArrayList<>();
        videoInfoList.add(new VideoInfo(videoId));
src/main/java/com/yeshi/buwan/service/imp/VideoInfoService.java
@@ -41,6 +41,7 @@
    @Resource
    private ClearService clearService;
    @Transactional
    public VideoInfo getVideoInfo(String vid) {
        return videoInfoDao.find(VideoInfo.class, vid);
    }
@@ -260,6 +261,7 @@
        return videoInfoDao.listByVideoIds(videoIds);
    }
    @Transactional
    public void hiddenVideo(String id) {
        VideoInfo videoInfo = videoInfoDao.find(VideoInfo.class, id);
        if (videoInfo != null && "1".equalsIgnoreCase(videoInfo.getShow())) {
src/main/java/com/yeshi/buwan/service/imp/ad/DeviceAdStrategyServiceImpl.java
@@ -239,4 +239,10 @@
        }
    }
    @Override
    public void setFSAShowTomorrow(String deviceId, String detailSystemId) {
        long showTime = TimeUtil.convertGernalTime(TimeUtil.getGernalTime(System.currentTimeMillis() + 1000 * 60 * 60 * 24L, "yyyy-MM-dd"), "yyyy-MM-dd");
        setVideoDetailAdStrategy(deviceId, detailSystemId, showTime, null);
    }
}
src/main/java/com/yeshi/buwan/service/imp/juhe/FunTV2ServiceImpl.java
@@ -273,7 +273,7 @@
        int t = getPlayType(acceptData, video2);
        PlayUrl pu = new PlayUrl();
        pu.setParams("");
        pu.setPlayType(t);
        pu.setPlayType(1);
        pu.setResource(vr);
        pu.setAid(video2.getMediaId());
        pu.setVid(video2.getId());
src/main/java/com/yeshi/buwan/service/imp/juhe/Iqiyi2ServiceImpl.java
@@ -32,9 +32,11 @@
import com.yeshi.buwan.util.mq.CMQManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.Serializable;
@@ -162,6 +164,7 @@
        return false;
    }
    @Transactional
    @Override
    public void addToVideoInfo(IqiyiAlbum2 album) {
        if (album.getFeatureAlbumId() > 0L && album.getChannelId() != IqiYiNewAPI.TYPE_DIANYING) {
src/main/java/com/yeshi/buwan/service/inter/ad/DeviceAdStrategyService.java
@@ -56,4 +56,15 @@
     */
    public void watchPPTVVideo(String deviceId, String detailSystemId);
    /**
     * @author hxh
     * @description 设置明日再展示全屏视频广告
     * @date 10:58 2022/5/17
     * @param: deviceId
     * @param: detailSystemId
     * @return void
     **/
    public void setFSAShowTomorrow(String deviceId, String detailSystemId);
}
src/main/java/com/yeshi/buwan/service/manager/search/SolrAlbumVideoDataManager.java
@@ -26,6 +26,7 @@
import org.springframework.data.solr.core.query.SimpleQuery;
import org.springframework.data.solr.core.query.result.ScoredPage;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.Serializable;
@@ -61,6 +62,7 @@
    private VideoResourceService videoResourceService;
    @Transactional
    public void saveOrUpdate(VideoInfo videoInfo) {
        List<VideoResource> resourceList = videoResourceService.getResourceList();
        List<Long> rids = new ArrayList<>();
src/main/java/com/yeshi/buwan/util/Constant.java
@@ -17,7 +17,7 @@
    public static boolean IsOutNet = true;// 是否为外网
    public static boolean JobTasker = false;
    public static boolean JobTasker = true;
    public static int pageCount = 20;
    public static int HOT_SEARCH_COUNT = 20;
src/main/java/com/yeshi/buwan/util/SpringContext.java
@@ -92,7 +92,7 @@
    private void init() {
        logger.error("初始化");
        if (!Constant.JobTasker) {
//        if (!Constant.JobTasker) {
            doSolrJob();
            doAddIqiyi2Video();
            doAddFunTV2Video();
@@ -101,7 +101,7 @@
            doUpdateVideoExtraInfo();
            doInternetSearchVideoUpdateJob();
            doUpdateResourceVideoJob();
        }
//        }
//        doUpdateResourceVideoJob();
    }
src/main/java/com/yeshi/buwan/util/mq/CMQManager.java
@@ -5,7 +5,6 @@
import com.yeshi.buwan.dto.mq.*;
import com.yeshi.buwan.util.StringUtil;
import net.sf.json.JSONObject;
import org.yeshi.utils.CMQUtil;
import java.util.ArrayList;
import java.util.HashMap;
@@ -16,11 +15,7 @@
    private static String secretId = "AKIDTlpgJhLjOozvd6QI2XnpfGbgV4NQJk25";
    private static String secretKey = "xhCSUHo55oHUQ6XicFcmfIgspX0EEzWo";
    private static CMQManager cmqManager;
    private static CMQUtil cmqUtil;
    private static TDMQUtil tdmqUtil;
    private final static boolean TDMQ_CONSUMER = true;
    // 搜索引擎
    public static String QUEUENAME_SOLR = "buwan-solr-new";
    //视频更新-爱奇艺2
@@ -54,8 +49,6 @@
    static {
        cmqUtil = CMQUtil.getInstance(secretId, secretKey);
        tdmqUtil = TDMQUtil.getInstance();
        tdmqUtil.init(secretId, secretKey, true);
@@ -100,7 +93,7 @@
    //消费专辑更新消息
    public List<IqiyiAlbum2MQMsg> consumeIqiyiAlbumUpdateMsg(int count) {
        List<IqiyiAlbum2MQMsg> list = new ArrayList<>();
        List<Message> msgList = TDMQ_CONSUMER ? tdmqUtil.recieveMsg(count, QUEUENAME_VIDEO_UPDATE_IQIYI_2) : cmqUtil.recieveMsg(count, QUEUENAME_VIDEO_UPDATE_IQIYI_2);
        List<Message> msgList = tdmqUtil.recieveMsg(count, QUEUENAME_VIDEO_UPDATE_IQIYI_2);
        if (msgList != null)
            for (Message msg : msgList) {
                IqiyiAlbum2MQMsg mm = new IqiyiAlbum2MQMsg();
@@ -113,11 +106,8 @@
    //删除专辑更新消息
    public void deleteIqiyiAlbumUpdateMsg(String handler) {
        if (TDMQ_CONSUMER) {
            tdmqUtil.deleteMsg(QUEUENAME_VIDEO_UPDATE_IQIYI_2, handler);
        } else {
            cmqUtil.deleteMsg(QUEUENAME_VIDEO_UPDATE_IQIYI_2, handler);
        }
    }
@@ -129,7 +119,7 @@
    //消费专辑更新消息
    public List<FunTVAlbum2MQMsg> consumeFunTVAlbumUpdateMsg(int count) {
        List<FunTVAlbum2MQMsg> list = new ArrayList<>();
        List<Message> msgList = TDMQ_CONSUMER ? tdmqUtil.recieveMsg(count, QUEUENAME_VIDEO_UPDATE_FUNTV_2) : cmqUtil.recieveMsg(count, QUEUENAME_VIDEO_UPDATE_FUNTV_2);
        List<Message> msgList = tdmqUtil.recieveMsg(count, QUEUENAME_VIDEO_UPDATE_FUNTV_2);
        if (msgList != null)
            for (Message msg : msgList) {
                FunTVAlbum2MQMsg mm = new FunTVAlbum2MQMsg();
@@ -143,11 +133,8 @@
    //删除专辑更新消息
    public void deleteFunTVAlbumUpdateMsg(String handler) {
        if (TDMQ_CONSUMER) {
            tdmqUtil.deleteMsg(QUEUENAME_VIDEO_UPDATE_FUNTV_2, handler);
        } else {
            cmqUtil.deleteMsg(QUEUENAME_VIDEO_UPDATE_FUNTV_2, handler);
        }
    }
@@ -165,7 +152,7 @@
    //消费专辑更新消息
    public List<PPTVMQMsg> consumePPTVSeriesUpdateMsg(int count) {
        List<PPTVMQMsg> list = new ArrayList<>();
        List<Message> msgList = TDMQ_CONSUMER ? tdmqUtil.recieveMsg(count, QUEUENAME_VIDEO_UPDATE_PPTV) : cmqUtil.recieveMsg(count, QUEUENAME_VIDEO_UPDATE_PPTV);
        List<Message> msgList = tdmqUtil.recieveMsg(count, QUEUENAME_VIDEO_UPDATE_PPTV);
        if (msgList != null)
            for (Message msg : msgList) {
                PPTVMQMsg mm = new Gson().fromJson(msg.msgBody, PPTVMQMsg.class);
@@ -177,11 +164,9 @@
    //删除专辑更新消息
    public void deletePPTVSeriesUpdateMsg(String handler) {
        if (TDMQ_CONSUMER) {
            tdmqUtil.deleteMsg(QUEUENAME_VIDEO_UPDATE_PPTV, handler);
        } else {
            cmqUtil.deleteMsg(QUEUENAME_VIDEO_UPDATE_PPTV, handler);
        }
    }
@@ -201,7 +186,7 @@
    public List<SolrVideoMQMsg> consumeSolrMsg(int count) {
        List<SolrVideoMQMsg> list = new ArrayList<>();
        List<Message> msgList = TDMQ_CONSUMER ? tdmqUtil.recieveMsg(count, QUEUENAME_SOLR) : cmqUtil.recieveMsg(count, QUEUENAME_SOLR);
        List<Message> msgList = tdmqUtil.recieveMsg(count, QUEUENAME_SOLR);
        if (msgList != null)
            for (Message msg : msgList) {
                SolrVideoMQMsg mm = new SolrVideoMQMsg();
@@ -214,11 +199,9 @@
    public void deleteSolrMsg(String handler) {
        if (TDMQ_CONSUMER) {
            tdmqUtil.deleteMsg(QUEUENAME_SOLR, handler);
        } else {
            cmqUtil.deleteMsg(QUEUENAME_SOLR, handler);
        }
    }
@@ -234,7 +217,7 @@
    public List<CMQResult> consumeVideoResourceDeleteMsg(int count) {
        List<CMQResult> list = new ArrayList<>();
        List<Message> msgList = TDMQ_CONSUMER ? tdmqUtil.recieveMsg(count, QUEUENAME_VIDEO_RESOURCE_DELETE) : cmqUtil.recieveMsg(count, QUEUENAME_VIDEO_RESOURCE_DELETE);
        List<Message> msgList = tdmqUtil.recieveMsg(count, QUEUENAME_VIDEO_RESOURCE_DELETE);
        if (msgList != null)
            for (Message msg : msgList) {
                CMQResult mm = new CMQResult();
@@ -247,11 +230,9 @@
    public void deleteVideoResourceDeleteMsg(String handler) {
        if (TDMQ_CONSUMER) {
            tdmqUtil.deleteMsg(QUEUENAME_VIDEO_RESOURCE_DELETE, handler);
        } else {
            cmqUtil.deleteMsg(QUEUENAME_VIDEO_RESOURCE_DELETE, handler);
        }
    }
@@ -267,7 +248,7 @@
    public List<CMQResult> consumeUpdateVideoExtraInfoMsg(int count) {
        List<CMQResult> list = new ArrayList<>();
        List<Message> msgList = TDMQ_CONSUMER ? tdmqUtil.recieveMsg(count, QUEUENAME_UPDATE_VIDEO_EXTRAINFO) : cmqUtil.recieveMsg(count, QUEUENAME_UPDATE_VIDEO_EXTRAINFO);
        List<Message> msgList = tdmqUtil.recieveMsg(count, QUEUENAME_UPDATE_VIDEO_EXTRAINFO);
        if (msgList != null)
            for (Message msg : msgList) {
                CMQResult mm = new CMQResult();
@@ -279,11 +260,9 @@
    }
    public void deleteUpdateVideoExtraInfoMsg(String handler) {
        if (TDMQ_CONSUMER) {
            tdmqUtil.deleteMsg(QUEUENAME_UPDATE_VIDEO_EXTRAINFO, handler);
        } else {
            cmqUtil.deleteMsg(QUEUENAME_UPDATE_VIDEO_EXTRAINFO, handler);
        }
    }
@@ -300,7 +279,7 @@
    public List<InternetSearchVideoMQMsg> consumeInternetSearchVideoUpdateMsg(int count) {
        Gson gson = new Gson();
        List<InternetSearchVideoMQMsg> list = new ArrayList<>();
        List<Message> msgList = TDMQ_CONSUMER ? tdmqUtil.recieveMsg(count, QUEUENAME_UPDATE_INTERNET_SEARCH) : cmqUtil.recieveMsg(count, QUEUENAME_UPDATE_INTERNET_SEARCH);
        List<Message> msgList = tdmqUtil.recieveMsg(count, QUEUENAME_UPDATE_INTERNET_SEARCH);
        if (msgList != null)
            for (Message msg : msgList) {
                InternetSearchVideoMQMsg mm = gson.fromJson(msg.msgBody, InternetSearchVideoMQMsg.class);
@@ -312,11 +291,9 @@
    public void deleteInternetSearchVideoUpdateMsg(String handler) {
        if (TDMQ_CONSUMER) {
            tdmqUtil.deleteMsg(QUEUENAME_UPDATE_INTERNET_SEARCH, handler);
        } else {
            cmqUtil.deleteMsg(QUEUENAME_UPDATE_INTERNET_SEARCH, handler);
        }
    }
    /**
@@ -329,18 +306,16 @@
    }
    public void deleteUpdateResourceVideoMsg(String handler) {
        if (TDMQ_CONSUMER) {
            tdmqUtil.deleteMsg(QUEUENAME_UPDATE_RESOURCE_VIDEO, handler);
        } else {
            cmqUtil.deleteMsg(QUEUENAME_UPDATE_RESOURCE_VIDEO, handler);
        }
    }
    public List<UpdateResourceVideoMQMsg> consumeUpdateResourceVideoMsg(int count) {
        Gson gson = new Gson();
        List<UpdateResourceVideoMQMsg> list = new ArrayList<>();
        List<Message> msgList = TDMQ_CONSUMER ? tdmqUtil.recieveMsg(count, QUEUENAME_UPDATE_RESOURCE_VIDEO) : cmqUtil.recieveMsg(count, QUEUENAME_UPDATE_RESOURCE_VIDEO);
        List<Message> msgList = tdmqUtil.recieveMsg(count, QUEUENAME_UPDATE_RESOURCE_VIDEO);
        if (msgList != null)
            for (Message msg : msgList) {
                try {
@@ -368,7 +343,7 @@
    public Map<String, VideoDataChangeMQMsg> consumeVideoSyncV2DataMsg(int count) {
        Gson gson = new Gson();
        Map<String, VideoDataChangeMQMsg> map = new HashMap<>();
        List<Message> msgList = TDMQ_CONSUMER ? tdmqUtil.recieveMsg(count, QUEUENAME_UPDATE_INTERNET_SEARCH) : cmqUtil.recieveMsg(count, QUEUENAME_UPDATE_INTERNET_SEARCH);
        List<Message> msgList = tdmqUtil.recieveMsg(count, QUEUENAME_UPDATE_INTERNET_SEARCH);
        if (msgList != null)
            for (Message msg : msgList) {
                map.put(msg.receiptHandle, gson.fromJson(msg.msgBody, VideoDataChangeMQMsg.class));
@@ -378,12 +353,7 @@
    public void deleteVideoSyncV2DataMsg(String handler) {
        if (TDMQ_CONSUMER) {
            tdmqUtil.deleteMsg(QUEUENAME_VIDEO_SYNCDATA_V2, handler);
        } else {
            cmqUtil.deleteMsg(QUEUENAME_VIDEO_SYNCDATA_V2, handler);
        }
    }
}
src/main/java/com/yeshi/buwan/util/mq/consumer/QueueHelloWorldListener.java
New file
@@ -0,0 +1,26 @@
package com.yeshi.buwan.util.mq.consumer;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener;
/**
 * @author hxh
 * @title: QueueHelloWorldListener
 * @description: TODO
 * @date 2022/8/1 11:37
 */
public class QueueHelloWorldListener implements ChannelAwareMessageListener {
    @Override
    public void onMessage(Message message, Channel channel) throws Exception {
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        try{
            channel.basicAck(deliveryTag, true);
        }catch(Exception e){
            // 拒绝签收
            // 第三个参数:requeue:重回队列。如果设置为true,则消息重新回到queue,broker会重新发送该消息给消费端
            // 如果是false, 则消息被丢弃
            channel.basicNack(deliveryTag, true, true);
        }
    }
}
src/main/resources/consumer.xml
@@ -9,9 +9,9 @@
        <dubbo:parameter key="qos.port" value="33333"></dubbo:parameter>
    </dubbo:application>
    <dubbo:registry address="zookeeper://172.16.16.46:2181"/>
    <!--<dubbo:registry address="zookeeper://172.16.16.46:2181"/>-->
    <!--<dubbo:registry address="zookeeper://193.112.35.168:2182"/>-->
    <dubbo:registry address="zookeeper://193.112.35.168:2182"/>
    <dubbo:annotation package="com"/>
src/main/resources/env-dev/logback.xml
@@ -3,7 +3,7 @@
    scanPeriod设置扫描配置文件的时间间隔(如果没有指定单位默认为毫秒)
    debug 如果设置为true,在控制台中打印logback内部运行日志(内部状态信息,如果配置文件有错误
    也会输出),由于logback已经很稳定了,我们一般设置为false,以免干扰我们查看有用的日志信息  -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<configuration scan="true" scanPeriod="60 seconds" debug="true">
    <contextName>BuWan</contextName>
    <!--定义参数常量(全局变量)-->
    <!--设置Logger的等级 (TRACE<DEBUG<INFO<WARN<ERROR),假设配置为INFO,那么debug将不会被
@@ -18,6 +18,10 @@
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>
    <property resource="kafka_log.properties"></property>
    <property name="tencent.log.accesskey" value="AKIDTlpgJhLjOozvd6QI2XnpfGbgV4NQJk25"/>
    <property name="tencent.log.accessKeySecret" value="xhCSUHo55oHUQ6XicFcmfIgspX0EEzWo"/>
    <!--appender是为了配置日志信息输出到哪个地方-->
    <!--控制台设置,输出到控制台中-->
@@ -116,6 +120,42 @@
        </filter>
    </appender>
    <appender name="videoSearchAppender" class="com.tencentcloudapi.cls.LoghubAppender">
        <!--必选项-->
        <endpoint>ap-guangzhou.cls.tencentcs.com</endpoint>
        <accessKeyId>${tencent.log.accesskey}</accessKeyId>
        <accessKeySecret>${tencent.log.accessKeySecret}</accessKeySecret>
        <topicId>b92e919d-c3f4-435e-9b9f-8a66d5c3989a</topicId>
        <!-- 可选项 详见 '参数说明'-->
        <!-- #单个 producer 实例能缓存的日志大小上限,默认为 100MB。 -->
       <totalSizeInBytes>104857600</totalSizeInBytes>
        <!--如果 producer 可用空间不足,调用者在 send 方法上的最大阻塞时间,默认为 60 秒。为了不阻塞打印日志的线程,强烈建议将该值设置成 0。 -->
       <maxBlockMs>0</maxBlockMs>
        <!--执行日志发送任务的线程池大小,默认为可用处理器个数。 -->
       <sendThreadCount>8</sendThreadCount>
        <!-- 当一个 ProducerBatch 中缓存的日志大小大于等于 batchSizeThresholdInBytes 时,该 batch 将被发送,默认为 512 KB,最大可设置成 5MB。-->
        <batchSizeThresholdInBytes>10</batchSizeThresholdInBytes>
        <!--当一个 ProducerBatch 中缓存的日志条数大于等于 batchCountThreshold 时,该 batch 将被发送,默认为 4096,最大可设置成 40960 -->
        <batchCountThreshold>1</batchCountThreshold>
        <!-- 一个 ProducerBatch 从创建到可发送的逗留时间,默认为 2 秒,最小可设置成 100 毫秒-->
        <lingerMs>2000</lingerMs>
        <!-- 如果 retries 小于等于 0,该 ProducerBatch 首次发送失败后将直接进入失败队列 -->
        <retries>10</retries>
        <!--首次重试的退避时间,默认为 100 毫秒 -->
       <baseRetryBackoffMs>100</baseRetryBackoffMs>
        <!-- 重试的最大退避时间,默认为 50 秒。 -->
       <maxRetryBackoffMs>50000</maxRetryBackoffMs>
       <!-- 可选项 设置时间格式 -->
        <timeFormat>yyyy-MM-dd'T'HH:mm:ssZ</timeFormat>
        <timeZone>Asia/Shanghai</timeZone>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <mdcFields>THREAD_ID,MDC_KEY</mdcFields>
    </appender>
    <appender name="videoPlayAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.filePath}/video/video_play.log</file>
@@ -161,7 +201,7 @@
    <!--视频搜索关键词 -->
    <logger name="com.yeshi.buwan.service.manager.search.SolrAlbumVideoDataManager" level="INFO" additivity="true">
        <appender-ref ref="searchAppender"></appender-ref>
        <appender-ref ref="videoSearchAppender"></appender-ref>
    </logger>
@@ -237,7 +277,7 @@
    <!-- 一切logger都会继承自root,root默认的层级level为debug -->
    <root>
        <level value="INFO"/>
        <level value="DEBUG"/>
        <!--在控制台中输出所在层级对应level(以及大于level)的日志信息,因为这里并没有设置LevelFilter-->
        <appender-ref ref="STDOUT"></appender-ref>
src/main/resources/env-dev/rabbitmq.properties
New file
@@ -0,0 +1,5 @@
rabbitmq.host=134.175.68.214
rabbitmq.port=5672
rabbitmq.username=root
rabbitmq.password=yeshi2014
rabbitmq.virtual-host=myRabbitmq
src/main/resources/env-pro/logback.xml
@@ -19,6 +19,13 @@
    <property resource="kafka_log.properties"></property>
    <property name="tencent.log.accesskey" value="AKIDTlpgJhLjOozvd6QI2XnpfGbgV4NQJk25"/>
    <property name="tencent.log.accessKeySecret" value="xhCSUHo55oHUQ6XicFcmfIgspX0EEzWo"/>
    <property name="tencent.log.endpoint" value="ap-guangzhou.cls.tencentyun.com"/>
    <!--appender是为了配置日志信息输出到哪个地方-->
    <!--控制台设置,输出到控制台中-->
@@ -94,6 +101,55 @@
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="videoSearchAppender" class="com.tencentcloudapi.cls.LoghubAppender">
        <!--必选项-->
        <endpoint>${tencent.log.endpoint}</endpoint>
        <accessKeyId>${tencent.log.accesskey}</accessKeyId>
        <accessKeySecret>${tencent.log.accessKeySecret}</accessKeySecret>
        <topicId>b92e919d-c3f4-435e-9b9f-8a66d5c3989a</topicId>
        <!-- 可选项 设置时间格式 -->
        <timeFormat>yyyy-MM-dd'T'HH:mm:ssZ</timeFormat>
        <timeZone>Asia/Shanghai</timeZone>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <mdcFields>THREAD_ID,MDC_KEY</mdcFields>
    </appender>
    <appender name="appStoreAppender" class="com.tencentcloudapi.cls.LoghubAppender">
        <!--必选项-->
        <endpoint>${tencent.log.endpoint}</endpoint>
        <accessKeyId>${tencent.log.accesskey}</accessKeyId>
        <accessKeySecret>${tencent.log.accessKeySecret}</accessKeySecret>
        <topicId>95b406ff-ede6-4461-b1c6-2657b1b8cf67</topicId>
        <!-- 可选项 设置时间格式 -->
        <timeFormat>yyyy-MM-dd'T'HH:mm:ssZ</timeFormat>
        <timeZone>Asia/Shanghai</timeZone>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <mdcFields>THREAD_ID,MDC_KEY</mdcFields>
    </appender>
    <appender name="dpEventAppender" class="com.tencentcloudapi.cls.LoghubAppender">
        <!--必选项-->
        <endpoint>${tencent.log.endpoint}</endpoint>
        <accessKeyId>${tencent.log.accesskey}</accessKeyId>
        <accessKeySecret>${tencent.log.accessKeySecret}</accessKeySecret>
        <topicId>db78b631-1764-48c5-9010-0209b63c9a5f</topicId>
        <!-- 可选项 设置时间格式 -->
        <timeFormat>yyyy-MM-dd'T'HH:mm:ssZ</timeFormat>
        <timeZone>Asia/Shanghai</timeZone>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <mdcFields>THREAD_ID,MDC_KEY</mdcFields>
    </appender>
@@ -179,86 +235,6 @@
        </filter>
    </appender>
    <appender name="KAFKA_SEARCH_KEY" class="com.yeshi.buwan.log.KafkaAppender">
        <!-- encoder必须配置, 日志格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--<pattern>-->
            <!--%red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %highlight(%-5level) %green([%thread]) %boldMagenta(%logger{10}) - %cyan(%msg%n)-->
            <!--</pattern>-->
            <!--为了便于分析将日志数据转为json格式-->
            <pattern>${log.pattern}</pattern>
            <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
            <charset>UTF-8</charset>
        </encoder>
        <bootstrapServers>${log.config.kafka.bootstrapServers}</bootstrapServers>
        <topic>${log.config.kafka.topic}</topic>
        <batchSize>${log.config.kafka.batchSize}</batchSize>
        <lingerMs>${log.config.kafka.lingerMs}</lingerMs>
        <compressionType>${log.config.kafka.compressionType}</compressionType>
        <retries>${log.config.kafka.retries}</retries>
        <maxRequestSize>${log.config.kafka.maxRequestSize}</maxRequestSize>
        <isSend>${log.config.kafka.isSend}</isSend>
    </appender>
    <appender name="KAFKA_DP_LOG" class="com.yeshi.buwan.log.KafkaAppender">
        <!-- encoder必须配置, 日志格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--<pattern>-->
            <!--%red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %highlight(%-5level) %green([%thread]) %boldMagenta(%logger{10}) - %cyan(%msg%n)-->
            <!--</pattern>-->
            <!--为了便于分析将日志数据转为json格式-->
            <pattern>${log.pattern}</pattern>
            <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
            <charset>UTF-8</charset>
        </encoder>
        <bootstrapServers>${log.config.kafka.bootstrapServers}</bootstrapServers>
        <topic>${log.config.kafka.topic_dp}</topic>
        <batchSize>${log.config.kafka.batchSize}</batchSize>
        <lingerMs>${log.config.kafka.lingerMs}</lingerMs>
        <compressionType>${log.config.kafka.compressionType}</compressionType>
        <retries>${log.config.kafka.retries}</retries>
        <maxRequestSize>${log.config.kafka.maxRequestSize}</maxRequestSize>
        <isSend>${log.config.kafka.isSend}</isSend>
    </appender>
    <!--name表示为哪一个logger指定层级和输出的方式
       additivity表示叠加祖先的输出方式(默认为true,会叠加),所以com.lxc.o2o以及其子类都会输出在控制台中,因为这个logger继承了root中的appender
       level表示级别大于等于${log.level}的信息才会输出,输出方式为配置的appender,
       由于这里level为debug(重写了,就不会继承root的level了),
           所以控制台中会输出大于等于debug等级的日志(包括持久层执行的mysql)
           并且
           debug日志会输出到debugAppender指定的文件中
           info日志会输出到infoAppender指定的文件中
           error日志会输出到errorAppender指定的文件中-->
    <appender name="KAFKA_APPLE_PAY" class="com.yeshi.buwan.log.KafkaAppender">
        <!-- encoder必须配置, 日志格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--<pattern>-->
            <!--%red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %highlight(%-5level) %green([%thread]) %boldMagenta(%logger{10}) - %cyan(%msg%n)-->
            <!--</pattern>-->
            <!--为了便于分析将日志数据转为json格式-->
            <pattern>${log.pattern}</pattern>
            <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
            <charset>UTF-8</charset>
        </encoder>
        <bootstrapServers>${log.config.kafka.bootstrapServers}</bootstrapServers>
        <topic>log_buwan_ios_pay</topic>
        <batchSize>${log.config.kafka.batchSize}</batchSize>
        <lingerMs>${log.config.kafka.lingerMs}</lingerMs>
        <compressionType>${log.config.kafka.compressionType}</compressionType>
        <retries>${log.config.kafka.retries}</retries>
        <maxRequestSize>${log.config.kafka.maxRequestSize}</maxRequestSize>
        <isSend>${log.config.kafka.isSend}</isSend>
    </appender>
    <logger name="com.hxh.spring" level="INFO">
        <appender-ref ref="STDOUT"></appender-ref>
@@ -267,11 +243,6 @@
    <!--additivity 是否向上传递 -->
    <logger name="com.yeshi.buwan.aspect" level="ERROR" additivity="true">
        <appender-ref ref="apiErrorAppender"></appender-ref>
    </logger>
    <!--视频搜索关键词 -->
    <logger name="com.yeshi.buwan.service.manager.search.SolrAlbumVideoDataManager" level="INFO" additivity="true">
        <appender-ref ref="Appender"></appender-ref>
    </logger>
    <logger name="com.yeshi.buwan.service.imp.Service" level="INFO" additivity="true">
@@ -334,16 +305,16 @@
    <!-- 关键词搜索 -->
    <logger name="searchKey" level="INFO" additivity="false">
        <appender-ref ref="KAFKA_SEARCH_KEY"></appender-ref>
        <appender-ref ref="videoSearchAppender"></appender-ref>
    </logger>
    <logger name="com.yeshi.buwan.controller.AppleController" level="INFO" additivity="false">
        <appender-ref ref="KAFKA_APPLE_PAY"></appender-ref>
        <appender-ref ref="appStoreAppender"></appender-ref>
    </logger>
    <logger name="com.yeshi.buwan.controller.api.ClientEventController" level="INFO" additivity="false">
        <appender-ref ref="KAFKA_DP_LOG"></appender-ref>
        <appender-ref ref="dpEventAppender"></appender-ref>
    </logger>
src/main/resources/env-pro/rabbitmq.properties
New file
@@ -0,0 +1,5 @@
rabbitmq.host=172.16.16.38
rabbitmq.port=5672
rabbitmq.username=root
rabbitmq.password=yeshi2014
rabbitmq.virtual-host=myRabbitmq
src/main/resources/spring-rabbitmq-consumer.xml
New file
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:rabbit="http://www.springframework.org/schema/rabbit"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/rabbit
       http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">
    <context:property-placeholder location="classpath:rabbitmq.properties"/>
    <rabbit:connection-factory id="connectionFactory"
                               host="${rabbitmq.host}"
                               port="${rabbitmq.port}"
                               username="${rabbitmq.username}"
                               password="${rabbitmq.password}"
                               virtual-host="${rabbitmq.virtual-host}"/>
    <!--基础部分-->
    <bean id="queueHelloWorldListener" class="com.yeshi.buwan.util.mq.consumer.QueueHelloWorldListener"/>
    <rabbit:listener-container connection-factory="connectionFactory" auto-declare="true">
        <rabbit:listener ref="queueHelloWorldListener" queue-names="queue-hello-world"/>
    </rabbit:listener-container>
</beans>
src/main/resources/spring-rabbitmq-producer.xml
New file
@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:rabbit="http://www.springframework.org/schema/rabbit"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/rabbit
       http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">
    <context:property-placeholder location="classpath:rabbitmq.properties"/>
    <rabbit:connection-factory id="connectionFactory"
                               host="${rabbitmq.host}"
                               port="${rabbitmq.port}"
                               username="${rabbitmq.username}"
                               password="${rabbitmq.password}"
                               virtual-host="${rabbitmq.virtual-host}"/>
    <!--定义管理交换机、队列-->
    <rabbit:admin connection-factory="connectionFactory"/>
    <!--定义持久化队列,不存在则自动创建;不绑定到交换机则绑定到默认交换机. 默认交换机类型为direct,名字为:"",路由键为队列的名称-->
    <!--
        id:bean的名称
        name:queue的名称
        auto-declare:自动创建
        auto-delete:自动删除。 最后一个消费者和该队列断开连接后,自动删除队列
        durable:是否持久化
    -->
    <!-- 简单模式 -->
    <!-- ignore-declaration-exceptions: 忽略队列已存在且声明时属性不一致的报错 -->
    <rabbit:queue id="queue-hello-world" name="queue-hello-world" auto-declare="true" durable="false" ignore-declaration-exceptions="true"/>
    <!--工作队列模式-->
    <rabbit:queue id="queue-work-queue" name="queue-work-queue" auto-declare="true" durable="false"/>
    <!-- 发布订阅模式 -->
    <!-- fanout: 广播, 所有绑定到交换机的队列都能收到消息 -->
    <rabbit:queue id="queue-fanout-1" name="queue-fanout-1" auto-declare="true" durable="false"/>
    <rabbit:queue id="queue-fanout-2" name="queue-fanout-2" auto-declare="true" durable="false"/>
    <rabbit:fanout-exchange id="exchange-fanout" name="exchange-fanout" auto-declare="true" durable="false">
        <rabbit:bindings>
            <rabbit:binding queue="queue-fanout-1"/>
            <rabbit:binding queue="queue-fanout-2"/>
        </rabbit:bindings>
    </rabbit:fanout-exchange>
    <!-- 路由模式 -->
    <!-- direct: 定向, 绑定到交换机且指定的队列才能收到消息 -->
    <rabbit:queue id="queue-direct" name="queue-direct" auto-declare="true" durable="false"/>
    <rabbit:direct-exchange id="exchange-direct" name="exchange-direct">
        <rabbit:bindings>
            <!--key: 路由键-->
            <rabbit:binding queue="queue-direct" key="direct"/>
        </rabbit:bindings>
    </rabbit:direct-exchange>
    <!-- 主题模式 -->
    <!-- topic: 主题, 绑定到交换机且满足条件的队列才能收到消息, 路由键:*匹配一个单词,#匹配多个单词 -->
    <rabbit:queue id="queue-topic-1" name="queue-topic-1" auto-declare="true" durable="false"/>
    <rabbit:queue id="queue-topic-2" name="queue-topic-2" auto-declare="true" durable="false"/>
    <rabbit:queue id="queue-topic-3" name="queue-topic-3" auto-declare="true" durable="false"/>
    <rabbit:topic-exchange id="exchange-topic" name="exchange-topic" auto-declare="true">
        <rabbit:bindings>
            <rabbit:binding queue="queue-topic-1" pattern="topic.*"/>
            <rabbit:binding queue="queue-topic-2" pattern="topic.#"/>
            <rabbit:binding queue="queue-topic-3" pattern="topic.three.*"/>
        </rabbit:bindings>
    </rabbit:topic-exchange>
    <!-- rabbitTemplate-->
    <rabbit:template id="rabbitTemplate" connection-factory="connectionFactory"/>
</beans>
src/test/java/com/hxh/spring/test/IPTest.java
@@ -9,5 +9,8 @@
    public void test1() {
//        for (int i = 0; i < 10; i++)
            System.out.println(IPUtil.getIPProvince("134.175.68.214"));
//         com.tencentcloudapi.cls.producer.common.Logs$Log$Builder.toString();
    }
}
src/test/java/com/hxh/spring/test/Iqiyi2.java
@@ -116,14 +116,14 @@
//                246508201L, 248886801L, 230798901L, 1569537751867101L,
//        };
//        iqiyiUtil2.syncByAid(7643537550826500L);
        iqiyiUtil2.syncByAid(3697683745816301L,true);
//        IqiyiAlbum2 album2 = iqiyi2Service.selectAlbumById(240793601L);
//        if (album2 != null) {
//            iqiyi2Service.addToVideoInfo(album2);
//        }
        Long qikuID = 6917577458483001L;
        Long qikuID = 3697683745816301L;
        IqiyiAlbum2 album2 = iqiyi2Service.selectAlbumById(qikuID);
        if (album2 != null) {