test:(改代码)
parent
e3da3d1b4b
commit
9db5a3bbc4
|
@ -23,5 +23,11 @@
|
|||
<groupId>com.muyu</groupId>
|
||||
<artifactId>muyu-common-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>muyu-networking-common</artifactId>
|
||||
<version>3.6.3</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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<EntInfo> {
|
||||
|
||||
|
||||
public List<EntInfo> selectEnterpriseList(EntInfo entInfo);
|
||||
|
||||
}
|
||||
|
|
|
@ -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<EntInfoMapper, EntInfo> implements EntInfoService {
|
||||
|
||||
|
||||
@Autowired
|
||||
private EntInfoMapper entInfoMapper;
|
||||
|
||||
|
||||
@Override
|
||||
public List<EntInfo> selectEnterpriseList(EntInfo entInfo) {
|
||||
LambdaQueryWrapper<EntInfo> entInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
return entInfoMapper.selectList(entInfoLambdaQueryWrapper);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
<modules>
|
||||
<module>muyu-networking-common</module>
|
||||
<module>muyu-networking-service</module>
|
||||
|
||||
</modules>
|
||||
|
||||
<properties>
|
||||
|
@ -23,6 +24,14 @@
|
|||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
<version>5.8.27</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
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.muyu</groupId>
|
||||
<artifactId>muyu</artifactId>
|
||||
<version>3.6.3</version>
|
||||
<relativePath>../../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<artifactId>muyu-vehicle-common</artifactId>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
</project>
|
|
@ -26,6 +26,12 @@
|
|||
<version>3.6.3</version>
|
||||
</dependency>
|
||||
|
||||
<!--rabbitMQ-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-amqp</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
|
@ -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());
|
||||
// 回退了所有的信息,可做补偿机制 记录到 数据库
|
||||
}
|
||||
|
||||
}
|
|
@ -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<String, String> 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<EnterpriseInfo> dataSourceInfoList() {
|
||||
Result<List<EntInfo>> entInfoResult = remoteEntInfoService.list();
|
||||
List<EntInfo> entInfoList = entInfoResult.getData();
|
||||
List<EnterpriseInfo> 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<Object, Object> 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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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";
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.muyu.vehicle.myDatasource.holder;
|
||||
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue