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); } tdmqUtil.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); } tdmqUtil.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); } tdmqUtil.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); } tdmqUtil.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); } tdmqUtil.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); } tdmqUtil.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); } tdmqUtil.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); } tdmqUtil.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); } tdmqUtil.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) {