Merge branch 'dev.gateway.aliyuninitecs' into dev

dev.redis
ywt 2024-10-07 10:30:26 +08:00
commit 75f8da414d
12 changed files with 266 additions and 9 deletions

View File

@ -0,0 +1,44 @@
package com.muyu.common.rabbit.callback;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;
/**
* @author Lenovo
* @Description broker
*/
@Slf4j
@Component
public class ConfirmCallback implements RabbitTemplate.ConfirmCallback {
@Resource
private RabbitTemplate rabbitTemplate;
/**
*
*/
@PostConstruct
public void init() {
this.rabbitTemplate.setConfirmCallback(this);
}
/**
*
* @param correlationData
* @param ack truebrokerfalsebroker
* @param cause ackfalseacktrue
*/
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
if (ack) {
log.info("消息发送到broker成功");
} else {
log.info("消息发送到broker失败失败原因{}", cause);
}
}
}

View File

@ -0,0 +1,39 @@
package com.muyu.common.rabbit.callback;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.ReturnedMessage;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;
/**
* @author Lenovo
* @Description
*/
@Slf4j
@Component
public class ReturnsCallback implements RabbitTemplate.ReturnsCallback {
@Resource
private RabbitTemplate rabbitTemplate;
/**
*
*/
@PostConstruct
public void init() {
rabbitTemplate.setReturnsCallback(this);
}
/**
*
* @param returnedMessage
*/
@Override
public void returnedMessage(ReturnedMessage returnedMessage) {
log.info("消息:{}被交换机:{}回退!回退原因:{}", returnedMessage.getMessage().toString(),
returnedMessage.getExchange(), returnedMessage.getReplyText());
}
}

View File

@ -0,0 +1,72 @@
package com.muyu.common.rabbit.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.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author Lenovo
* @Description RabbitMQ
*/
@Configuration
public class RabbitAdminConfig {
/**
* RabbitMQ
*/
@Value("${spring.rabbitmq.host}")
private String host;
/**
* RabbitMQ
*/
@Value("${spring.rabbitmq.username}")
private String username;
/**
* RabbitMQ
*/
@Value("${spring.rabbitmq.password}")
private String password;
/**
* RabbitMQ
*/
@Value("${spring.rabbitmq.virtualhost}")
private String virtualhost;
/**
* RabbitAdmin
*
* @return RabbitAdmin
*/
@Bean
public RabbitAdmin rabbitAdmin() {
RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory());
rabbitAdmin.setAutoStartup(true);
return rabbitAdmin;
}
/**
* RabbitMQ
*
* @return ConnectionFactory
*/
@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;
}
}

View File

@ -0,0 +1,57 @@
package com.muyu.common.rabbit.config;
import org.springframework.amqp.rabbit.annotation.RabbitListenerConfigurer;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistrar;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
import org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory;
/**
* @author Lenovo
* @Description rabbitMQ
*/
@Configuration
public class RabbitListenerConfig implements RabbitListenerConfigurer {
static {
// 设置为信任所有类型的反序列化,确保消息能够正确反序列化
System.setProperty("spring.amqp.deserialization.trust.all", "true");
}
/**
* RabbitMQ
*/
@Autowired
public ConnectionFactory connectionFactory;
/**
* bean
*
* @return DefaultMessageHandlerMethodFactory
*/
@Bean
public DefaultMessageHandlerMethodFactory handlerMethodFactory() {
DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory();
// 这里的转换器设置实现了 通过 @Payload 注解 自动反序列化message body
factory.setMessageConverter(new MappingJackson2MessageConverter());
return factory;
}
/**
* RabbitMQ
*
* @param rabbitListenerEndpointRegistrar
*/
@Override
public void configureRabbitListeners(RabbitListenerEndpointRegistrar rabbitListenerEndpointRegistrar) {
// 注册自定义的消息处理方法工厂
rabbitListenerEndpointRegistrar.setMessageHandlerMethodFactory(handlerMethodFactory());
}
}

View File

@ -0,0 +1,26 @@
package com.muyu.common.rabbit.config;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author Lenovo
* @Description rabbitMQ
*/
@Configuration
public class RabbitMQMessageConverterConfig {
/**
*
*
* @return
*/
@Bean
public MessageConverter jsonMessageConverter() {
return new Jackson2JsonMessageConverter();
}
}

View File

@ -22,9 +22,13 @@ public class VehicleConnection {
/**
*
*/
private String userName;
private String username;
/**
*
*/
private String nonce;
/**
*
*/
private String password;
}

View File

@ -28,7 +28,7 @@ public class VehicleConnectionReq {
/**
*
*/
private String userName;
private String username;
/**
*

View File

@ -126,8 +126,8 @@ public class DelInstance implements ApplicationListener<ContextClosedEvent> {
try{
log.info("=======>删除实例");
delInstance();
redisTemplate.delete("instanceIds");
redisTemplate.delete("instanceList");
// redisTemplate.delete("instanceIds");
// redisTemplate.delete("instanceList");
} catch (Exception e) {
throw new RuntimeException(e);
}

View File

@ -61,7 +61,7 @@ public class Sample implements ApplicationRunner {
// 创建创建实例请求对象并设置参数
RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
.setRegionId("cn-shanghai") // 设置地域ID
.setImageId("m-uf63dnbv4od71jlezdne")// 设置镜像ID
.setImageId("m-uf66taa8r57ky0pg3e7s")// 设置镜像ID
.setInstanceType("ecs.e-c1m1.large")// 设置实例类型
.setSecurityGroupId("sg-uf6hyictocodexptlgiv")// 设置安全组ID
.setVSwitchId("vsw-uf6ags5luz17qd6ckn2tb")// 设置虚拟交换机ID

View File

@ -1,9 +1,10 @@
package com.muyu.cloud.vehicle.gateway.aliyun.mapper;
import com.muyu.cloud.vehicle.gateway.aliyun.domain.VehicleConnection;
import com.muyu.cloud.vehicle.gateway.aliyun.domain.req.VehicleConnectionReq;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface VehicleConnectionMapper {
void addConnect(VehicleConnectionReq vehicleConnectionReq);
void addConnect(VehicleConnection vehicleConnection);
}

View File

@ -1,9 +1,11 @@
package com.muyu.cloud.vehicle.gateway.aliyun.service.impl;
import com.muyu.cloud.vehicle.gateway.aliyun.domain.VehicleConnection;
import com.muyu.cloud.vehicle.gateway.aliyun.domain.req.VehicleConnectionReq;
import com.muyu.cloud.vehicle.gateway.aliyun.mapper.VehicleConnectionMapper;
import com.muyu.cloud.vehicle.gateway.aliyun.service.VehicleConnectionService;
import lombok.extern.log4j.Log4j2;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -11,11 +13,23 @@ import org.springframework.stereotype.Service;
@Service
public class VehicleConnectionServiceImpl implements VehicleConnectionService {
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private VehicleConnectionMapper vehicleConnectionMapper;
@Override
public void getConnect(VehicleConnectionReq vehicleConnectionReq) {
log.info("车辆连接请求:{}",vehicleConnectionReq.toString());
vehicleConnectionMapper.addConnect(vehicleConnectionReq);
//发送消息
rabbitTemplate.convertAndSend("exchange_topics_inform","",vehicleConnectionReq.getVehicleVin());
VehicleConnection vehicleConnection = new VehicleConnection();
vehicleConnection.setVehicleVin(vehicleConnectionReq.getVehicleVin());
vehicleConnection.setUsername(vehicleConnectionReq.getUsername());
vehicleConnection.setPassword(vehicleConnectionReq.getVehicleVin()+vehicleConnectionReq.getTimestamp()+vehicleConnectionReq.getNonce());
vehicleConnectionMapper.addConnect(vehicleConnection);
}
}

View File

@ -7,8 +7,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<insert id="addConnect">
insert into car_one_click_operation
(vehicle_vin,user_name,nonce,timestamp)
(vehicle_vin,user_name,password)
values
(#{vehicleVin},#{userName},#{nonce},#{timestamp})
(#{vehicleVin},#{username},#{password})
</insert>
</mapper>