24282 1 ano atrás
pai
commit
be603dd5d3

+ 7 - 0
pom.xml

@@ -17,6 +17,7 @@
         <module>sd-wln</module>
         <module>code-generation</module>
         <module>sd-cainiao</module>
+        <module>sd-mq</module>
     </modules>
 
     <properties>
@@ -67,6 +68,12 @@
                 <version>${sd.version}</version>
             </dependency>
 
+            <dependency>
+                <groupId>com.sd</groupId>
+                <artifactId>sd-mq</artifactId>
+                <version>${sd.version}</version>
+            </dependency>
+
         </dependencies>
     </dependencyManagement>
 

+ 5 - 0
sd-business/pom.xml

@@ -24,6 +24,11 @@
             <artifactId>sd-framework</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.sd</groupId>
+            <artifactId>sd-mq</artifactId>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 33 - 0
sd-business/src/main/java/com/sd/business/service/artwork/impl/ArtworkLibraryServiceImpl.java

@@ -16,8 +16,12 @@ import com.sd.business.entity.artwork.vo.ArtworkLibraryVo;
 import com.sd.business.mapper.artwork.ArtworkLibraryMapper;
 import com.sd.business.service.artwork.ArtworkLibraryService;
 import com.sd.framework.util.Assert;
+import com.sd.mq.config.ArtworkConfig;
+import com.sd.mq.entity.ArtworkMessage;
+import com.sd.mq.util.RabbitMqUtil;
 import org.springframework.stereotype.Service;
 
+import java.io.File;
 import java.util.Collections;
 
 /**
@@ -74,6 +78,8 @@ public class ArtworkLibraryServiceImpl extends ServiceImpl<ArtworkLibraryMapper,
 
         ObsFileUtil.saveFile(Collections.singletonList(imgFile), artworkLibraryDto.getId(), 1);
         ObsFileUtil.saveFile(Collections.singletonList(fileFile), artworkLibraryDto.getId(), 2);
+
+        sendMq(artworkLibraryDto, 1);
     }
 
     /**
@@ -89,6 +95,8 @@ public class ArtworkLibraryServiceImpl extends ServiceImpl<ArtworkLibraryMapper,
                 .last("limit 1"));
         Assert.eqZero(count, "图稿名称已存在");
 
+        ArtworkLibrary artworkLibrary = getById(artworkLibraryDto.getId());
+
         updateById(artworkLibraryDto);
 
         ObsFile imgFile = new ObsFile();
@@ -99,6 +107,9 @@ public class ArtworkLibraryServiceImpl extends ServiceImpl<ArtworkLibraryMapper,
 
         ObsFileUtil.editFile(Collections.singletonList(imgFile), artworkLibraryDto.getId(), 1);
         ObsFileUtil.editFile(Collections.singletonList(fileFile), artworkLibraryDto.getId(), 2);
+
+        sendMq(artworkLibrary, 2);
+        sendMq(artworkLibraryDto, 1);
     }
 
     /**
@@ -107,8 +118,30 @@ public class ArtworkLibraryServiceImpl extends ServiceImpl<ArtworkLibraryMapper,
     @DSTransactional
     @Override
     public void delete(Long id) {
+        ArtworkLibrary artworkLibrary = getById(id);
         removeById(id);
         ObsFileUtil.removeFile(id);
+
+        sendMq(artworkLibrary, 2);
+    }
+
+    /**
+     * 发送消息到mq
+     */
+    private void sendMq(ArtworkLibrary artworkLibrary, Integer type) {
+        String artworkName = artworkLibrary.getArtworkName();
+        String pathPrefix = "图稿库" + File.separator + artworkName + File.separator;
+
+        ArtworkMessage artworkMessage = new ArtworkMessage();
+        artworkMessage.setFilePath(pathPrefix + artworkLibrary.getFileName());
+        artworkMessage.setImgPath(pathPrefix + artworkLibrary.getImgName());
+        artworkMessage.setImgUrl(artworkLibrary.getImgUrl());
+        artworkMessage.setFileUrl(artworkLibrary.getFileUrl());
+        artworkMessage.setRetryCount(0);
+        artworkMessage.setType(type);
+        artworkMessage.setDeleteDirectory(pathPrefix);
+
+        RabbitMqUtil.send(ArtworkConfig.DIRECT_EXCHANGE_NAME, ArtworkConfig.QUEUE_NAME, artworkMessage);
     }
 
 }

+ 46 - 0
sd-mq/pom.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.sd</groupId>
+        <artifactId>sd_project</artifactId>
+        <version>1.0</version>
+    </parent>
+
+    <artifactId>sd-mq</artifactId>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-amqp</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.fastjson2</groupId>
+            <artifactId>fastjson2</artifactId>
+            <version>2.0.23</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.18</version>
+        </dependency>
+
+    </dependencies>
+
+</project>

+ 44 - 0
sd-mq/src/main/java/com/sd/mq/config/ArtworkConfig.java

@@ -0,0 +1,44 @@
+package com.sd.mq.config;
+
+import org.springframework.amqp.core.Binding;
+import org.springframework.amqp.core.BindingBuilder;
+import org.springframework.amqp.core.DirectExchange;
+import org.springframework.amqp.core.Queue;
+import org.springframework.amqp.rabbit.annotation.EnableRabbit;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@EnableRabbit
+@Configuration
+public class ArtworkConfig {
+
+    public static final String QUEUE_NAME = "artwork.queue";
+    public static final String DIRECT_EXCHANGE_NAME = "artwork.direct.exchange";
+
+    //创建一个队列
+    @Bean
+    public Queue artworkQueue() {
+        // durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
+        // exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
+        // autoDelete:是否自动删除,有消息者订阅本队列,然后所有消费者都解除订阅此队列,会自动删除。
+        // arguments:队列携带的参数,比如设置队列的死信队列,消息的过期时间等等。
+        return new Queue(QUEUE_NAME, true, false, false);
+    }
+
+    //创建一个名为TestDirectExchange的Direct类型的交换机
+    @Bean
+    public DirectExchange artworkDirectExchange() {
+        // durable:是否持久化,默认是false,持久化交换机。
+        // autoDelete:是否自动删除,交换机先有队列或者其他交换机绑定的时候,然后当该交换机没有队列或其他交换机绑定的时候,会自动删除。
+        // arguments:交换机设置的参数,比如设置交换机的备用交换机(Alternate Exchange),当消息不能被路由到该交换机绑定的队列上时,会自动路由到备用交换机
+        return new DirectExchange(DIRECT_EXCHANGE_NAME, true, false);
+    }
+
+    //绑定交换机和队列
+    @Bean
+    public Binding artworkBinding() {
+        //bind队列to交换机
+        return BindingBuilder.bind(artworkQueue()).to(artworkDirectExchange()).withQueueName();
+    }
+
+}

+ 49 - 0
sd-mq/src/main/java/com/sd/mq/entity/ArtworkMessage.java

@@ -0,0 +1,49 @@
+package com.sd.mq.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class ArtworkMessage implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 图片url地址
+     */
+    private String imgUrl;
+
+    /**
+     * 图片保存地址
+     */
+    private String imgPath;
+
+    /**
+     * 文件地址
+     */
+    private String fileUrl;
+
+    /**
+     * 文件保存地址
+     */
+    private String filePath;
+
+    /**
+     * 重试次数
+     */
+    private int retryCount;
+
+    /**
+     * 类型: 1新增 2删除
+     */
+    private int type;
+
+    /**
+     * 删除文件夹
+     */
+    private String deleteDirectory;
+
+}

+ 17 - 0
sd-mq/src/main/java/com/sd/mq/util/RabbitMqUtil.java

@@ -0,0 +1,17 @@
+package com.sd.mq.util;
+
+import cn.hutool.extra.spring.SpringUtil;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+
+public class RabbitMqUtil {
+
+    private static final RabbitTemplate rabbitTemplate = SpringUtil.getBean(RabbitTemplate.class);
+
+    /**
+     * 发送消息
+     */
+    public static void send(String exchange, String routingKey, Object object) {
+        rabbitTemplate.convertAndSend(exchange, routingKey, object);
+    }
+
+}

+ 15 - 0
sd-starter/src/main/resources/application-dev.yml

@@ -14,6 +14,21 @@ spring:
           username: root
           password: 5fWD*oa^nso@kmKa
 
+  rabbitmq:
+    port: 2762
+    host: 139.9.184.42
+    username: fjhx_sd_rabbit_mq
+    password: da3aKs*Sa_s13D*das
+    virtual-host: test
+    #这个配置是保证提供者确保消息推送到交换机中,不管成不成功,都会回调
+    publisher-confirm-type: correlated
+    #保证交换机能把消息推送到队列中
+    publisher-returns: true
+    #这个配置是保证消费者会消费消息,手动确认
+    listener:
+      simple:
+        acknowledge-mode: manual
+
   # redis 配置
   redis:
     # 地址

+ 15 - 0
sd-starter/src/main/resources/application-prod.yml

@@ -14,6 +14,21 @@ spring:
           username: sd_prod
           password: lG0-nX8#rJ4#jT5
 
+  rabbitmq:
+    port: 2762
+    host: 127.0.0.1
+    username: fjhx_sd_rabbit_mq
+    password: da3aKs*Sa_s13D*das
+    virtual-host: prod
+    #这个配置是保证提供者确保消息推送到交换机中,不管成不成功,都会回调
+    publisher-confirm-type: correlated
+    #保证交换机能把消息推送到队列中
+    publisher-returns: true
+    #这个配置是保证消费者会消费消息,手动确认
+    listener:
+      simple:
+        acknowledge-mode: manual
+
   # redis 配置
   redis:
     # 地址

+ 14 - 0
sd-starter/src/main/resources/application-test.yml

@@ -14,6 +14,20 @@ spring:
           username: root
           password: 5fWD*oa^nso@kmKa
 
+  rabbitmq:
+    port: 2762
+    host: 139.9.184.42
+    username: fjhx_sd_rabbit_mq
+    password: da3aKs*Sa_s13D*das
+    virtual-host: test
+    #这个配置是保证提供者确保消息推送到交换机中,不管成不成功,都会回调
+    publisher-confirm-type: correlated
+    #保证交换机能把消息推送到队列中
+    publisher-returns: true
+    #这个配置是保证消费者会消费消息,手动确认
+    listener:
+      simple:
+        acknowledge-mode: manual
   # redis 配置
   redis:
     # 地址