Bläddra i källkod

ross数据统计

zhijiezhao 2 år sedan
förälder
incheckning
55b2b7a422

+ 12 - 1
pom.xml

@@ -313,7 +313,18 @@
             <artifactId>jjwt</artifactId>
             <version>0.9.1</version>
         </dependency>
-
+        <!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-spring-boot-starter -->
+        <!-- RocketMQ starter -->
+        <dependency>
+            <groupId>org.apache.rocketmq</groupId>
+            <artifactId>rocketmq-spring-boot-starter</artifactId>
+            <version>2.2.0</version>
+        </dependency>
+        <!-- mongo -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-mongodb</artifactId>
+        </dependency>
     </dependencies>
 
     <profiles>

+ 16 - 0
src/main/java/com/caimei/aop/IpSave.java

@@ -0,0 +1,16 @@
+package com.caimei.aop;
+
+import java.lang.annotation.*;
+
+/**
+ * @author Administrator
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface IpSave {
+
+    String saveName();
+
+    boolean saveParams();
+}

+ 101 - 0
src/main/java/com/caimei/aop/IpSaveAspect.java

@@ -0,0 +1,101 @@
+package com.caimei.aop;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.caimei.model.dto.MessageDto;
+import com.caimei.service.aopservice.RocketMqService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+
+
+/**
+ *
+ */
+@Slf4j
+@Aspect
+@Component
+public class IpSaveAspect {
+
+    @Autowired
+    private RocketMqService rocketMqService;
+    /**
+     * 切入点,根据自定义IpSave实际路径进行调整
+     */
+    @Pointcut("@annotation(com.caimei.aop.IpSave)")
+    public void executeIdempotent() {
+    }
+
+    @Around("executeIdempotent()")
+    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
+        //获取方法对象
+        Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
+        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
+        HttpServletRequest request = servletRequestAttributes.getRequest();
+        // ip
+        String unknown = "unknown";
+        String ip = "";
+        ip = request.getHeader("x-forwarded-for");
+        if (StringUtils.isBlank(ip)) {
+            ip = request.getHeader("X-Real-IP");
+        }
+        if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
+            ip = request.getHeader("Proxy-Client-IP");
+        }
+
+        if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
+            ip = request.getHeader("WL-Proxy-Client-IP");
+        }
+
+        if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
+            ip = request.getRemoteAddr();
+        }
+        // 接口路径
+        String requestURI = request.getRequestURI();
+        //获取自定义注解
+        IpSave ipSave = method.getAnnotation(IpSave.class);
+        // 访问名 注解的值
+        String s = ipSave.saveName();
+        // 是否存储发送参数
+        boolean sp = ipSave.saveParams();
+        // 接口真实发送参数
+        String queryString = "";
+        JSONObject jsonObject = new JSONObject();
+        if (sp) {
+            jsonObject.put("queryString",queryString);
+        }
+        if (StringUtils.isNotBlank(ip)) {
+            jsonObject.put("ip",ip);
+        }
+        if (StringUtils.isNotBlank(requestURI)) {
+            jsonObject.put("URI",requestURI);
+        }
+        if (StringUtils.isNotBlank(s)) {
+            jsonObject.put("saveName",s);
+        }
+        MessageDto messageDto = new MessageDto();
+        messageDto.setTopic("zpIp");
+        messageDto.setContent(jsonObject.toJSONString());
+        messageDto.setSort(1);
+        messageDto.setAsync(1);
+        //异步给mq存
+        rocketMqService.sendCommonMessage(messageDto);
+
+        return joinPoint.proceed();
+    }
+}
+

+ 3 - 0
src/main/java/com/caimei/controller/wechat/WxAuthApi.java

@@ -1,5 +1,6 @@
 package com.caimei.controller.wechat;
 
+import com.caimei.aop.IpSave;
 import com.caimei.model.ResponseJson;
 import com.caimei.model.vo.*;
 import com.caimei.module.base.entity.vo.AuthProductVo;
@@ -59,6 +60,7 @@ public class WxAuthApi {
             @ApiImplicitParam(name = "pageNum", required = false, value = "第几页"),
             @ApiImplicitParam(name = "pageSize", required = false, value = "一页多少条")
     })
+    @IpSave(saveName = "机构列表",saveParams = false)
     @GetMapping("/club/list")
     public ResponseJson<PageInfo<WxClubListVo>> getWxClubList(Integer authUserId, String appId, String lngAndLat, String clubName, Integer provinceId,
                                                               Integer cityId, Integer townId,
@@ -72,6 +74,7 @@ public class WxAuthApi {
 
     @ApiOperation("已认证机构详情")
     @ApiImplicitParam(required = false, name = "authId", value = "正品联盟机构Id")
+    @IpSave(saveName = "机构详情",saveParams = true)
     @GetMapping("/club/details")
     public ResponseJson<WxClubDetailsVo> getWxClubDetails(Integer authId) {
         return authClubService.getWxClubDetails(authId);

+ 6 - 0
src/main/java/com/caimei/controller/wechat/WxDataApi.java

@@ -1,6 +1,7 @@
 package com.caimei.controller.wechat;
 
 import com.alibaba.fastjson.JSONObject;
+import com.caimei.aop.IpSave;
 import com.caimei.model.ResponseJson;
 import com.caimei.model.vo.*;
 import com.caimei.service.auth.*;
@@ -38,6 +39,7 @@ public class WxDataApi {
             @ApiImplicitParam(name = "pageNum", required = false, value = "第几页"),
             @ApiImplicitParam(name = "pageSize", required = false, value = "一页多少条")
     })
+    @IpSave(saveName = "文章列表",saveParams = true)
     @GetMapping("/article/list")
     public ResponseJson<PageInfo<WxArticleListVo>> getWxArticleList(Integer authUserId, String articleTitle,
                                                                     @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
@@ -47,6 +49,7 @@ public class WxDataApi {
 
     @ApiOperation("资料库文章回显数据")
     @ApiImplicitParam(name = "articleId", value = "文章id", required = true)
+    @IpSave(saveName = "文章详情",saveParams = true)
     @GetMapping("/article/form/data")
     public ResponseJson<ArticleFormVo> getArticleFormData(Integer articleId) {
         return articleService.getArticleFormData(articleId);
@@ -59,6 +62,7 @@ public class WxDataApi {
             @ApiImplicitParam(name = "pageNum", required = false, value = "第几页"),
             @ApiImplicitParam(name = "pageSize", required = false, value = "一页多少条")
     })
+    @IpSave(saveName = "图片列表",saveParams = true)
     @GetMapping("/image/list")
     public ResponseJson<PageInfo<WxImageListVo>> getWxImageList(Integer authUserId, String imageTitle,
                                                                 @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
@@ -73,6 +77,7 @@ public class WxDataApi {
             @ApiImplicitParam(name = "pageNum", required = false, value = "第几页"),
             @ApiImplicitParam(name = "pageSize", required = false, value = "一页多少条")
     })
+    @IpSave(saveName = "资料库视频列表",saveParams = true)
     @GetMapping("/video/list")
     public ResponseJson<PageInfo<WxVideoListVo>> getWxVideoList(Integer authUserId, String videoTitle,
                                                                 @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
@@ -88,6 +93,7 @@ public class WxDataApi {
             @ApiImplicitParam(name = "pageNum", required = false, value = "第几页"),
             @ApiImplicitParam(name = "pageSize", required = false, value = "一页多少条")
     })
+    @IpSave(saveName = "文件列表",saveParams = true)
     @GetMapping("/file/list")
     public ResponseJson<PageInfo<WxFileListVo>> getWxFileList(Integer authUserId, Integer fileType, String fileTitle,
                                                               @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,

+ 63 - 0
src/main/java/com/caimei/listener/IpSaveListener.java

@@ -0,0 +1,63 @@
+package com.caimei.listener;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.caimei.model.po.IpSavePo;
+import com.caimei.service.aopservice.IpSaveService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
+import org.apache.rocketmq.spring.core.RocketMQListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.UnsupportedEncodingException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @author Administrator
+ */
+@Slf4j
+@Component
+@RocketMQMessageListener(
+        topic = "zpIp",
+        // messageModel = MessageModel.BROADCASTING,//指定为广播消费
+        // consumeMode = ConsumeMode.ORDERLY, // 指定消费模式为顺序消费,消费的顺序也和发送顺序一致
+        // selectorType = SelectorType.TAG,// 如果我们的生产者指定了Tag,但是消费者的selectorExpression没有设置,即用默认的“*”,那么这个消费者也会消费到
+        // selectorExpression = "tag",     // 指定了tag后,发送的消息如果不带tag,将会消费不到
+        consumerGroup = "Zp_group")
+public class IpSaveListener implements RocketMQListener<String> {
+
+    @Autowired
+    private IpSaveService ipSaveService;
+
+    @Override
+    public void onMessage(String message) {
+        log.info("{}收到消息:{}", this.getClass().getSimpleName(), message);
+        JSONObject jsonObject = JSONObject.parseObject(message);
+        //ip,接口路径,接口参数,注解名
+        String ip = (String) jsonObject.get("ip");
+        String path = (String) jsonObject.get("URI");
+        String param = (String) jsonObject.get("queryString");
+        String saveName = (String) jsonObject.get("saveName");
+        IpSavePo ipSavePo = new IpSavePo();
+        if (StringUtils.isNotBlank(path)) {
+            ipSavePo.setRequestUrl(path);
+        }
+        if (StringUtils.isNotBlank(saveName)) {
+            ipSavePo.setPortName(saveName);
+        }
+        if (StringUtils.isNotBlank(ip)) {
+            ipSavePo.setIp(ip);
+        }
+        if(StringUtils.isNotBlank(param)){
+            ipSavePo.setParams(param);
+        }
+        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
+        String nowDate = format.format(new Date());
+        Long aLong = Long.valueOf(nowDate);
+        ipSavePo.setSaveTime(aLong);
+        ipSaveService.save(ipSavePo);
+    }
+}

+ 8 - 0
src/main/java/com/caimei/mapper/aopMapper/IpSaveRepository.java

@@ -0,0 +1,8 @@
+package com.caimei.mapper.aopMapper;
+
+import com.caimei.model.po.IpSavePo;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+public interface IpSaveRepository extends MongoRepository<IpSavePo,String> {
+
+}

+ 58 - 0
src/main/java/com/caimei/model/dto/MessageDto.java

@@ -0,0 +1,58 @@
+package com.caimei.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/6/17
+ */
+@ApiModel("发送消息接收参数")
+@Data
+public class MessageDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 消息主题
+     */
+    @NotNull
+    @ApiModelProperty("消息主题")
+    private String topic;
+    /**
+     * 消息内容
+     */
+    @NotNull
+    @ApiModelProperty("消息内容")
+    private String content;
+    /**
+     * 消息标签(可选)
+     */
+    @ApiModelProperty("消息标签(可选)")
+    private String tag;
+    /**
+     * 有序消息(可选)
+     */
+    @ApiModelProperty("有序消息(可选):1是,0否")
+    private Integer sort;
+    /**
+     * 异步消息(可选)
+     */
+    @ApiModelProperty("异步消息(可选):1是,0否")
+    private Integer async;
+    /**
+     * 单向消息(可选)
+     */
+    @ApiModelProperty("单向消息(可选):1是,0否")
+    private Integer oneway;
+    /**
+     * 延时消息(可选)
+     */
+    @ApiModelProperty("延时消息(可选),延时等级:1-18,0否,对应时间依次:1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h")
+    private Integer delay;
+
+}

+ 46 - 0
src/main/java/com/caimei/model/po/IpSavePo.java

@@ -0,0 +1,46 @@
+package com.caimei.model.po;
+
+import lombok.Data;
+import lombok.ToString;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.data.mongodb.core.mapping.Field;
+
+import java.io.Serializable;
+
+/**
+ * @author Administrator
+ */ 
+//可以省略,如果省略,则默认使用类名小写映射集合
+@Document(collection="ZpIpCollection")
+@Data
+@ToString
+public class IpSavePo implements Serializable {
+    /**
+     * 主键标识,该属性的值会自动对应mongodb的主键字段"_id",如果该属性名就叫“id”,则该注解可以省略,否则必须写
+     */
+    @Id
+    private String id;
+    private String userId;
+    /**
+     * 该属性对应mongodb的字段的名字,如果一致,则无需该注解
+     */
+    @Field("ip")
+    private String ip;
+    /**
+     * 用户访问接口参数
+     */
+    private String params;
+    /**
+     * 用户访问路径
+     */
+    private String requestUrl;
+    /**
+     * 接口显示名称(展示名)
+     */
+    private String portName;
+    /**
+     * 时间
+     */
+    private Long saveTime;
+}

+ 73 - 0
src/main/java/com/caimei/service/aopservice/IpSaveService.java

@@ -0,0 +1,73 @@
+package com.caimei.service.aopservice;
+
+
+import com.caimei.mapper.aopMapper.IpSaveRepository;
+import com.caimei.model.po.IpSavePo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.stereotype.Service;
+
+
+import java.util.List;
+
+/**
+ * @author Administrator
+ */
+@Service
+public class IpSaveService {
+
+    @Autowired
+    private IpSaveRepository ipSaveRepository;
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
+
+    /**
+     * 保存
+     * @param IpSavePo
+     */
+    public void save(IpSavePo IpSavePo){
+        //如果需要自定义主键,可以在这里指定主键;如果不指定主键,MongoDB会自动生成主键
+        //设置一些默认初始值。。。
+        //调用dao
+        ipSaveRepository.save(IpSavePo);
+    }
+
+    /**
+     * 修改
+     * @param IpSavePo
+     */
+    public void update(IpSavePo IpSavePo){
+        //调用dao
+        ipSaveRepository.save(IpSavePo);
+    }
+
+    /**
+     * 根据id删除
+     * @param id
+     */
+    public void deleteById(String id){
+        //调用dao
+        ipSaveRepository.deleteById(id);
+    }
+
+    /**
+     * 查询所有
+     * @return
+     */
+    public List<IpSavePo> findList(){
+        //调用dao
+        return ipSaveRepository.findAll();
+    }
+
+    /**
+     * 根据id查询
+     * @param id
+     * @return
+     */
+    public IpSavePo findById(String id){
+        //调用dao
+        return ipSaveRepository.findById(id).get();
+    }
+
+}

+ 126 - 0
src/main/java/com/caimei/service/aopservice/RocketMqService.java

@@ -0,0 +1,126 @@
+package com.caimei.service.aopservice;
+
+import com.alibaba.fastjson.JSON;
+import com.caimei.model.dto.MessageDto;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.rocketmq.client.producer.SendCallback;
+import org.apache.rocketmq.client.producer.SendResult;
+import org.apache.rocketmq.spring.core.RocketMQTemplate;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.messaging.Message;
+import org.springframework.messaging.support.MessageBuilder;
+import org.springframework.stereotype.Service;
+
+/**
+ * RocketMQ消息中间件实现类
+ *
+ * @author : Charles
+ * @date : 2021/6/17
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class RocketMqService {
+
+
+    public final Long timeout=3000L;
+
+    public final RocketMQTemplate rocketMQTemplate;
+
+    /**
+     * 发送消息
+     *
+     * @param messageDto {
+     *                   topic    消息主题
+     *                   content  消息内容
+     *                   tag      消息标签(可选)
+     *                   sort     有序消息(可选):1是,0否
+     *                   async    异步消息(可选):1是,0否
+     *                   oneway   单向消息(可选):1是,0否
+     *                   delay    延时消息等级(可选):1-18,0否,对应时间依次:1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
+     *                   }
+     * @return SendResult
+     */
+    public SendResult sendCommonMessage(MessageDto messageDto) {
+        String destination = messageDto.getTopic();
+        if (StringUtils.isNotEmpty(messageDto.getTag())) {
+            destination += ":" + messageDto.getTag();
+        }
+        Message<String> message = MessageBuilder.withPayload(messageDto.getContent()).build();
+        SendResult returnResult = null;
+        boolean isAsync = (messageDto.getAsync() != null && messageDto.getAsync() == 1);
+        boolean isSort = (messageDto.getSort() != null && messageDto.getSort() == 1);
+        boolean isOneway = (messageDto.getOneway() != null && messageDto.getOneway() == 1);
+        boolean isDelay = (messageDto.getDelay() != null && messageDto.getDelay() > 0);
+        if (!isAsync) {
+            // 同步消息
+            if (isDelay) {
+                // 延时
+                returnResult = rocketMQTemplate.syncSend(destination, message, timeout, messageDto.getDelay());
+            } else {
+                if (isSort && isOneway) {
+                    // 单向有序
+                    rocketMQTemplate.sendOneWayOrderly(destination, message, "hashkey");
+                } else if (isSort) {
+                    // 有序
+                    returnResult = rocketMQTemplate.syncSendOrderly(destination, message, "hashkey");
+                } else if (isOneway) {
+                    // 单向
+                    rocketMQTemplate.sendOneWay(destination, message);
+                } else {
+                    returnResult = rocketMQTemplate.syncSend(destination, message);
+                }
+            }
+            log.info(returnResult.toString());
+        } else {
+            // 异步消息
+            if (isDelay) {
+                // 异步延时
+                rocketMQTemplate.asyncSend(destination, message, new SendCallback() {
+                    @Override
+                    public void onSuccess(SendResult sendResult) {
+                        log.info("异步消息发送成功:{}", JSON.toJSONString(sendResult));
+                        //可以处理相应的业务
+                    }
+                    @Override
+                    public void onException(Throwable throwable) {
+                        //可以处理相应的业务
+                        log.info("异步消息发送失败:{}", JSON.toJSONString(throwable));
+                    }
+                }, timeout, messageDto.getDelay());
+            } else {
+                if (isSort) {
+                    // 异步有序
+                    rocketMQTemplate.asyncSendOrderly(destination, message, "hashkey", new SendCallback() {
+                        @Override
+                        public void onSuccess(SendResult sendResult) {
+                            log.info("异步消息发送成功:{}", JSON.toJSONString(sendResult));
+                            //可以处理相应的业务
+                        }
+                        @Override
+                        public void onException(Throwable throwable) {
+                            //可以处理相应的业务
+                            log.info("异步消息发送失败:{}", JSON.toJSONString(throwable));
+                        }
+                    });
+                } else {
+                    rocketMQTemplate.asyncSend(destination, message, new SendCallback() {
+                        @Override
+                        public void onSuccess(SendResult sendResult) {
+                            log.info("异步消息发送成功:{}", JSON.toJSONString(sendResult));
+                            //可以处理相应的业务
+                        }
+                        @Override
+                        public void onException(Throwable throwable) {
+                            //可以处理相应的业务
+                            log.info("异步消息发送失败:{}", JSON.toJSONString(throwable));
+                        }
+                    });
+                }
+            }
+        }
+        return returnResult;
+    }
+}

+ 14 - 1
src/main/resources/config/beta/application-beta.yml

@@ -22,6 +22,12 @@ spring:
       max-lifetime: 1800000
       connection-timeout: 30000
       connection-test-query: SELECT 1
+  #mongo数据源配置
+  data:
+    mongodb:
+      #使用uri连接
+      # mongodb://用户名:密码@IP地址:27017/数据库
+      uri: mongodb://zzj:easyCome.@47.107.48.218:27017/userInfo
   #数据源连接--end
 
   redis:
@@ -91,4 +97,11 @@ aliyunConfig:
   accessKeyId: LTAI4GBL3o4YkWnbKYgf2Xia
   accessKeySecret: dBjAXqbYiEPP6Ukuk2ZsXQeET7FVkK
   bucketName: caimei-oss
-  endpoint: https://oss-cn-shenzhen.aliyuncs.com
+  endpoint: https://oss-cn-shenzhen.aliyuncs.com
+
+# rocketmq 配置项,对应 RocketMQProperties 配置类
+rocketmq:
+  name-server: 47.107.48.218:9876  # RocketMQ Namesrv,测试环境120.79.25.27:9876未启动
+  producer:
+    group: caimei_beta_group            # 生产者分组
+    send-message-timeout: 3000     # 发送消息超时时间,单位:毫秒。默认为 3000 。

+ 12 - 0
src/main/resources/config/dev/application-dev.yml

@@ -22,6 +22,12 @@ spring:
       max-lifetime: 1800000
       connection-timeout: 30000
       connection-test-query: SELECT 1
+  data:
+    #mongo数据源配置
+    mongodb:
+      #使用uri连接
+      # mongodb://用户名:密码@IP地址:27017/数据库
+      uri: mongodb://zzj:easyCome.@192.168.2.100:27017/userInfo
   #数据源连接--end
 
   redis:
@@ -88,3 +94,9 @@ aliyunConfig:
   bucketName: caimei-oss
   endpoint: https://oss-cn-shenzhen.aliyuncs.com
 
+# rocketmq 配置项,对应 RocketMQProperties 配置类
+rocketmq:
+  name-server: 192.168.2.100:9876  # RocketMQ Namesrv
+  producer:
+    group: caimei_dev_group        # 生产者分组
+    send-message-timeout: 3000     # 发送消息超时时间,单位:毫秒。默认为 3000 。

+ 12 - 0
src/main/resources/config/prod/application-prod.yml

@@ -22,6 +22,11 @@ spring:
       max-lifetime: 1800000
       connection-timeout: 30000
       connection-test-query: SELECT 1
+  data:
+    mongodb:
+      #使用uri连接
+      # mongodb://用户名:密码@IP地址:27017/数据库
+      uri: mongodb://zzj:easyCome.@120.79.162.1:27017/userInfo
   #数据源连接--end
 
   redis:
@@ -84,3 +89,10 @@ aliyunConfig:
   accessKeySecret: dBjAXqbYiEPP6Ukuk2ZsXQeET7FVkK
   bucketName: caimei-oss
   endpoint: https://oss-cn-shenzhen.aliyuncs.com
+
+# rocketmq 配置项,对应 RocketMQProperties 配置类
+rocketmq:
+  name-server: 39.108.11.105:9876  # RocketMQ Namesrv
+  producer:
+    group: caimei_prod_group            # 生产者分组
+    send-message-timeout: 3000     # 发送消息超时时间,单位:毫秒。默认为 3000 。