From 9db5a3bbc4dee9f34b7b97b100901a3141baf7d2 Mon Sep 17 00:00:00 2001 From: zhang xu <2125563902@qq.com> Date: Tue, 11 Jun 2024 22:29:28 +0800 Subject: [PATCH] =?UTF-8?q?test:(=E6=94=B9=E4=BB=A3=E7=A0=81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- muyu-common/muyu-common-system/pom.xml | 6 + .../main/java/com/muyu/domain/AddService.java | 64 +++++++++ .../networking/service/EntInfoService.java | 7 + .../service/impl/EntInfoServiceImpl.java | 20 ++- muyu-modules/muyu-networking/pom.xml | 9 ++ .../muyu-vehicle/muyu-vehicle-common/pom.xml | 21 +++ .../muyu-vehicle/muyu-vehicle-service/pom.xml | 6 + .../vehicle/config/RabbitAdminConfig.java | 60 +++++++++ .../muyu/vehicle/config/RabbitmqConfig.java | 21 +++ .../vehicle/config/ReturnCallbackConfig.java | 36 ++++++ .../vehicle/myDatasource/ManyDataSource.java | 121 ++++++++++++++++++ .../constants/DatasourceConstant.java | 4 +- .../holder/DynamicDataSourceHolder.java | 1 + 13 files changed, 369 insertions(+), 7 deletions(-) create mode 100644 muyu-modules/muyu-vehicle/muyu-vehicle-common/pom.xml create mode 100644 muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/config/RabbitAdminConfig.java create mode 100644 muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/config/RabbitmqConfig.java create mode 100644 muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/config/ReturnCallbackConfig.java create mode 100644 muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/myDatasource/ManyDataSource.java diff --git a/muyu-common/muyu-common-system/pom.xml b/muyu-common/muyu-common-system/pom.xml index 62fdc74..ca8f7d8 100644 --- a/muyu-common/muyu-common-system/pom.xml +++ b/muyu-common/muyu-common-system/pom.xml @@ -23,5 +23,11 @@ com.muyu muyu-common-core + + com.muyu + muyu-networking-common + 3.6.3 + compile + diff --git a/muyu-modules/muyu-networking/muyu-networking-common/src/main/java/com/muyu/domain/AddService.java b/muyu-modules/muyu-networking/muyu-networking-common/src/main/java/com/muyu/domain/AddService.java index 74a5e42..fd95c9e 100644 --- a/muyu-modules/muyu-networking/muyu-networking-common/src/main/java/com/muyu/domain/AddService.java +++ b/muyu-modules/muyu-networking/muyu-networking-common/src/main/java/com/muyu/domain/AddService.java @@ -25,6 +25,70 @@ public class AddService extends BaseEntity { *增值类型 * */ private Integer addValue; + /** + *增值服务名称 + * */ + private String addName; + /** + *增值服务价格 + * */ + private Double addPrice; + /** + *增值服务状态 + * */ + private Integer addStatus; + /** + *增值服务描述 + * */ + private String addDesc; + /** + *增值服务图片 + * */ + private String addImg; + /** + *增值服务类型 + * */ + private Integer addType; + /** + *增值服务类型 + * */ + private Integer addTypeId; + /** + *增值服务类型 + * */ + private String addTypeName; + /** + *增值服务类型 + * */ + private String addTypeDesc; + /** + *增值服务类型 + * */ + private String addTypeImg; + /** + *增值服务类型 + * */ + private Integer addTypeStatus; + /** + *增值服务类型 + * */ + private Integer addTypeSort; + /** + *增值服务类型 + * */ + private Integer addTypeSort1; + /** + *增值服务类型 + * */ + private Integer addTypeSort2; + /** + *增值服务类型 + * */ + private Integer addTypeSort3; + /** + *增值服务类型 + * */ + private Integer addTypeSort4; diff --git a/muyu-modules/muyu-networking/muyu-networking-service/src/main/java/com/muyu/networking/service/EntInfoService.java b/muyu-modules/muyu-networking/muyu-networking-service/src/main/java/com/muyu/networking/service/EntInfoService.java index b26a453..1eaf7ae 100644 --- a/muyu-modules/muyu-networking/muyu-networking-service/src/main/java/com/muyu/networking/service/EntInfoService.java +++ b/muyu-modules/muyu-networking/muyu-networking-service/src/main/java/com/muyu/networking/service/EntInfoService.java @@ -1,8 +1,11 @@ package com.muyu.networking.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.domain.Enterprise; import com.muyu.domain.datasources.EntInfo; +import java.util.List; + /** * @ClassDescription: * @JdkVersion: 17 @@ -10,4 +13,8 @@ import com.muyu.domain.datasources.EntInfo; * @Created: 2024/6/10 20:55 */ public interface EntInfoService extends IService { + + + public List selectEnterpriseList(EntInfo entInfo); + } diff --git a/muyu-modules/muyu-networking/muyu-networking-service/src/main/java/com/muyu/networking/service/impl/EntInfoServiceImpl.java b/muyu-modules/muyu-networking/muyu-networking-service/src/main/java/com/muyu/networking/service/impl/EntInfoServiceImpl.java index 1c8a2ba..ce498ee 100644 --- a/muyu-modules/muyu-networking/muyu-networking-service/src/main/java/com/muyu/networking/service/impl/EntInfoServiceImpl.java +++ b/muyu-modules/muyu-networking/muyu-networking-service/src/main/java/com/muyu/networking/service/impl/EntInfoServiceImpl.java @@ -1,13 +1,14 @@ package com.muyu.networking.service.impl; - -import com.baomidou.mybatisplus.extension.service.IService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.muyu.domain.Enterprise; import com.muyu.domain.datasources.EntInfo; import com.muyu.networking.mapper.EntInfoMapper; -import com.muyu.networking.mapper.EnterpriseMapper; import com.muyu.networking.service.EntInfoService; -import com.muyu.networking.service.EnterpriseService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.annotation.AccessType; + +import java.util.List; + /** * @ClassDescription: @@ -18,4 +19,13 @@ import com.muyu.networking.service.EnterpriseService; public class EntInfoServiceImpl extends ServiceImpl implements EntInfoService { + @Autowired + private EntInfoMapper entInfoMapper; + + + @Override + public List selectEnterpriseList(EntInfo entInfo) { + LambdaQueryWrapper entInfoLambdaQueryWrapper = new LambdaQueryWrapper<>(); + return entInfoMapper.selectList(entInfoLambdaQueryWrapper); + } } diff --git a/muyu-modules/muyu-networking/pom.xml b/muyu-modules/muyu-networking/pom.xml index ef15bb2..52123c8 100644 --- a/muyu-modules/muyu-networking/pom.xml +++ b/muyu-modules/muyu-networking/pom.xml @@ -14,6 +14,7 @@ muyu-networking-common muyu-networking-service + @@ -23,6 +24,14 @@ + + + cn.hutool + hutool-all + 5.8.27 + + + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery diff --git a/muyu-modules/muyu-vehicle/muyu-vehicle-common/pom.xml b/muyu-modules/muyu-vehicle/muyu-vehicle-common/pom.xml new file mode 100644 index 0000000..a7b7538 --- /dev/null +++ b/muyu-modules/muyu-vehicle/muyu-vehicle-common/pom.xml @@ -0,0 +1,21 @@ + + + 4.0.0 + + com.muyu + muyu + 3.6.3 + ../../../pom.xml + + + muyu-vehicle-common + + + 17 + 17 + UTF-8 + + + diff --git a/muyu-modules/muyu-vehicle/muyu-vehicle-service/pom.xml b/muyu-modules/muyu-vehicle/muyu-vehicle-service/pom.xml index 68b295d..687ab42 100644 --- a/muyu-modules/muyu-vehicle/muyu-vehicle-service/pom.xml +++ b/muyu-modules/muyu-vehicle/muyu-vehicle-service/pom.xml @@ -26,6 +26,12 @@ 3.6.3 + + + org.springframework.boot + spring-boot-starter-amqp + + cn.hutool hutool-all diff --git a/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/config/RabbitAdminConfig.java b/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/config/RabbitAdminConfig.java new file mode 100644 index 0000000..f3ac822 --- /dev/null +++ b/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/config/RabbitAdminConfig.java @@ -0,0 +1,60 @@ +package com.muyu.vehicle.config; + + +import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.beans.factory.annotation.Value; +/** + * @ClassDescription: + * @JdkVersion: 17 + * @Author: zhangxu + * @Created: 2024/6/10 20:29 + */ +@Configuration +public class RabbitAdminConfig { + + + @Value("${spring.rabbitmq.host}") + private String host; + @Value("${spring.rabbitmq.username}") + private String username; + @Value("${spring.rabbitmq.password}") + private String password; + @Value("${spring.rabbitmq.virtualhost}") + private String virtualhost; + + /** + * 构建 RabbitMQ的连接工厂 + * @return + */ + @Bean + public ConnectionFactory connectionFactory() { + CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); + connectionFactory.setAddresses(host); + connectionFactory.setUsername(username); + connectionFactory.setPassword(password); + connectionFactory.setVirtualHost(virtualhost); + // 配置发送确认回调时,次配置必须配置,否则即使在RabbitTemplate配置了ConfirmCallback也不会生效 + connectionFactory.setPublisherConfirmType(CachingConnectionFactory.ConfirmType.CORRELATED); + connectionFactory.setPublisherReturns(true); + return connectionFactory; + } + + /** + * 自己初始化 RabbitAdmin + * @param connectionFactory + * @return + */ + @Bean + public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) { + RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory); + rabbitAdmin.setAutoStartup(true); + return rabbitAdmin; + } + + + +} diff --git a/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/config/RabbitmqConfig.java b/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/config/RabbitmqConfig.java new file mode 100644 index 0000000..d213523 --- /dev/null +++ b/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/config/RabbitmqConfig.java @@ -0,0 +1,21 @@ +package com.muyu.vehicle.config; + +import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @ClassDescription: + * @JdkVersion: 17 + * @Author: zhangxu + * @Created: 2024/6/10 20:27 + */ +@Configuration +public class RabbitmqConfig { + // 消息转换配置 + @Bean + public Jackson2JsonMessageConverter jsonMessageConverter() { + return new Jackson2JsonMessageConverter(); + } + +} diff --git a/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/config/ReturnCallbackConfig.java b/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/config/ReturnCallbackConfig.java new file mode 100644 index 0000000..30f5f9f --- /dev/null +++ b/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/config/ReturnCallbackConfig.java @@ -0,0 +1,36 @@ +package com.muyu.vehicle.config; + +import org.springframework.amqp.core.ReturnedMessage; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; + +import javax.annotation.PostConstruct; + +/** + * @ClassDescription: + * @JdkVersion: 17 + * @Author: zhangxu + * @Created: 2024/6/10 20:27 + */ +public class ReturnCallbackConfig implements RabbitTemplate.ReturnsCallback{ + + @Autowired + private RabbitTemplate rabbitTemplate; + + @PostConstruct // @PostContruct是spring框架的注解,在⽅法上加该注解会在项⽬启动的时候执⾏该⽅法,也可以理解为在spring容器初始化的时候执 + public void init() { + rabbitTemplate.setReturnsCallback(this); + } + + /** + * 消息发送到 队列失败 执行的 方法 + * @param returnedMessage the returned message and metadata. + */ + @Override + public void returnedMessage(ReturnedMessage returnedMessage) { + System.out.println("消息" + returnedMessage.getMessage().toString() + "被交换机" + returnedMessage.getExchange() + "回退!" + + "退回原因为:" + returnedMessage.getReplyText()); + // 回退了所有的信息,可做补偿机制 记录到 数据库 + } + +} diff --git a/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/myDatasource/ManyDataSource.java b/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/myDatasource/ManyDataSource.java new file mode 100644 index 0000000..cfbecc3 --- /dev/null +++ b/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/myDatasource/ManyDataSource.java @@ -0,0 +1,121 @@ +package com.muyu.vehicle.myDatasource; + + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.fastjson.JSON; + +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.SpringUtils; +import com.muyu.common.system.remote.RemoteUserService; +import com.muyu.domain.datasources.EntInfo; +import com.muyu.vehicle.myDatasource.domain.DataSourceInfo; +import com.muyu.vehicle.myDatasource.domain.EnterpriseInfo; +import com.muyu.vehicle.myDatasource.factory.DruidDataSourceFactory; +import com.muyu.vehicle.myDatasource.rule.DynamicDataSource; +import com.rabbitmq.client.Channel; +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @ClassDescription: + * @JdkVersion: 17 + * @Author: zhangxu + * @Created: 2024/6/10 20:04 + */ +@Log4j2 +@Component +public class ManyDataSource { + + + @Autowired + private RemoteUserService remoteEntInfoService; + + + @Autowired + private RedisTemplate redisTemplate; + + @RabbitListener(queuesToDeclare = {@Queue(name = "RoutingKey")}) + public void smsConfig(String msg, Message message, Channel channel) { + //获取消息的ID + String messageId = message.getMessageProperties().getMessageId(); + try { + //添加消息id到redis set集合中 添加成功返回1 表示未消费 添加失败返回0 表示已消费 + Long count = redisTemplate.opsForSet().add("messageId", messageId); + //添加成功 正常消费信息 + if (count == 1) { + log.info("开始消费"); + DruidDataSourceFactory druidDataSourceFactory = SpringUtils.getBean(DruidDataSourceFactory.class); + DynamicDataSource dynamicDataSource = SpringUtils.getBean(DynamicDataSource.class); + EntInfo entinfo = JSON.parseObject(msg, EntInfo.class); + DataSourceInfo dataSourceInfo = DataSourceInfo.hostAndPortBuild(entinfo.getEntCode(), entinfo.getIp(), Math.toIntExact(entinfo.getPort())); + DruidDataSource druidDataSource = druidDataSourceFactory.create(dataSourceInfo); + dynamicDataSource.put(dataSourceInfo.getKey(), druidDataSource); + //确认消费 + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); + log.info("消费成功"); + } + } catch (Exception e) { + //删除队列ID + log.info("消费重复"); + try { + //回退消息 + channel.basicReject(message.getMessageProperties().getDeliveryTag(), true); + log.info("消费失败"); + } catch (IOException ex) { + //回退失败 + log.info("消费异常"); + } + } + } + + private List dataSourceInfoList() { + Result> entInfoResult = remoteEntInfoService.list(); + List entInfoList = entInfoResult.getData(); + List list = new ArrayList<>(); + entInfoList.forEach(entInfo -> { + list.add( + EnterpriseInfo.builder() + .entCode(entInfo.getEntCode()) + .ip(entInfo.getIp()) + .port(String.valueOf(entInfo.getPort())) + .build() + ); + }); + return list; + } + + @Bean + @Primary + public DynamicDataSource dynamicDataSource(DruidDataSourceFactory druidDataSourceFactory) { + + Map dataSourceMap = new HashMap<>(); + dataSourceInfoList() + .stream() + .map(enterpriseInfo -> DataSourceInfo.hostAndPortBuild(enterpriseInfo.getEntCode(), enterpriseInfo.getIp(), Integer.valueOf(enterpriseInfo.getPort()))) + .forEach(dataSourceInfo -> { + dataSourceMap.put(dataSourceInfo.getKey(), druidDataSourceFactory.create(dataSourceInfo)); + }); + //设置动态数据源 + DynamicDataSource dynamicDataSource = new DynamicDataSource(); +// dynamicDataSource.setDefaultTargetDataSource(masterDataSource()); + dynamicDataSource.setTargetDataSources(dataSourceMap); + //将数据源信息备份在defineTargetDataSources中 + dynamicDataSource.setDefaultTargetDataSource(dataSourceMap); + return dynamicDataSource; + } + +} diff --git a/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/myDatasource/constants/DatasourceConstant.java b/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/myDatasource/constants/DatasourceConstant.java index cf58207..343d7f5 100644 --- a/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/myDatasource/constants/DatasourceConstant.java +++ b/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/myDatasource/constants/DatasourceConstant.java @@ -8,11 +8,11 @@ package com.muyu.vehicle.myDatasource.constants; */ public class DatasourceConstant { - public final static String DATASOURCE_URL = "jdbc:mysql://{}:{}/car_networking?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8"; + public final static String DATASOURCE_URL = "jdbc:mysql://{}:{}/networking?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8"; public final static String USER_NAME = "root"; - public final static String PASSWORD = "wxl@123"; + public final static String PASSWORD = "sal75-z"; } diff --git a/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/myDatasource/holder/DynamicDataSourceHolder.java b/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/myDatasource/holder/DynamicDataSourceHolder.java index 9ea2bc7..5982dd8 100644 --- a/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/myDatasource/holder/DynamicDataSourceHolder.java +++ b/muyu-modules/muyu-vehicle/muyu-vehicle-service/src/main/java/com/muyu/vehicle/myDatasource/holder/DynamicDataSourceHolder.java @@ -1,5 +1,6 @@ package com.muyu.vehicle.myDatasource.holder; +import cn.hutool.core.lang.Assert; import lombok.extern.log4j.Log4j2; /**