diff --git a/jeecg-boot/jeecg-boot-base/jeecg-boot-base-tools/src/main/java/org/jeecg/common/config/mqtoken/TransmitUserTokenFilter.java b/jeecg-boot/jeecg-boot-base/jeecg-boot-base-tools/src/main/java/org/jeecg/common/config/mqtoken/TransmitUserTokenFilter.java new file mode 100644 index 0000000..f0156e1 --- /dev/null +++ b/jeecg-boot/jeecg-boot-base/jeecg-boot-base-tools/src/main/java/org/jeecg/common/config/mqtoken/TransmitUserTokenFilter.java @@ -0,0 +1,43 @@ +package org.jeecg.common.config.mqtoken; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + +/** + * 存放token到上下文供队列调用feign使用 + * @author zyf + */ +public class TransmitUserTokenFilter implements Filter { + + private static String X_ACCESS_TOKEN="X-Access-Token"; + + public TransmitUserTokenFilter() { + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + this.initUserInfo((HttpServletRequest) request); + chain.doFilter(request, response); + } + + private void initUserInfo(HttpServletRequest request) { + String token = request.getHeader(X_ACCESS_TOKEN); + if (token!=null) { + try { + //将token放入上下文中 + UserTokenContext.setToken(token); + } catch (Exception e) { + + } + } + } + + @Override + public void destroy() { + } +} \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-base/jeecg-boot-base-tools/src/main/java/org/jeecg/common/config/mqtoken/UserTokenContext.java b/jeecg-boot/jeecg-boot-base/jeecg-boot-base-tools/src/main/java/org/jeecg/common/config/mqtoken/UserTokenContext.java new file mode 100644 index 0000000..6017586 --- /dev/null +++ b/jeecg-boot/jeecg-boot-base/jeecg-boot-base-tools/src/main/java/org/jeecg/common/config/mqtoken/UserTokenContext.java @@ -0,0 +1,22 @@ +package org.jeecg.common.config.mqtoken; + + +/** + * 用户token上下文 + * @author zyf + */ +public class UserTokenContext { + + private static ThreadLocal<String> userToken = new ThreadLocal<String>(); + + public UserTokenContext() { + } + + public static String getToken(){ + return userToken.get(); + } + + public static void setToken(String token){ + userToken.set(token); + } +} diff --git a/jeecg-boot/jeecg-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/client/RabbitMqClient.java b/jeecg-boot/jeecg-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/client/RabbitMqClient.java index 800a134..a6025bb 100644 --- a/jeecg-boot/jeecg-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/client/RabbitMqClient.java +++ b/jeecg-boot/jeecg-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/client/RabbitMqClient.java @@ -28,6 +28,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.util.Properties; /** * 消息队列客户端 @@ -91,11 +92,16 @@ public class RabbitMqClient { rabbitAdmin.declareExchange(directExchange); if (ObjectUtil.isNotEmpty(queues)) { for (String queueName : queues) { - Queue queue = new Queue(queueName); - addQueue(queue); - Binding binding = BindingBuilder.bind(queue).to(directExchange).with(queueName); - rabbitAdmin.declareBinding(binding); - log.info("队列创建成功:" + queueName); + Properties result = rabbitAdmin.getQueueProperties(queueName); + if (ObjectUtil.isEmpty(result)) { + Queue queue = new Queue(queueName); + addQueue(queue); + Binding binding = BindingBuilder.bind(queue).to(directExchange).with(queueName); + rabbitAdmin.declareBinding(binding); + log.info("创建队列:" + queueName); + }else{ + log.info("已有队列:" + queueName); + } } } } diff --git a/jeecg-boot/jeecg-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/config/RabbitMqConfig.java b/jeecg-boot/jeecg-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/config/RabbitMqConfig.java index bcb3aaf..9644dc9 100644 --- a/jeecg-boot/jeecg-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/config/RabbitMqConfig.java +++ b/jeecg-boot/jeecg-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/config/RabbitMqConfig.java @@ -1,10 +1,11 @@ package org.jeecg.boot.starter.rabbitmq.config; +import java.util.UUID; + import org.jeecg.boot.starter.rabbitmq.event.JeecgRemoteApplicationEvent; -import org.jeecg.boot.starter.rabbitmq.exchange.DelayExchangeBuilder; +import org.jeecg.common.config.mqtoken.TransmitUserTokenFilter; import org.springframework.amqp.core.AcknowledgeMode; -import org.springframework.amqp.core.CustomExchange; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitAdmin; import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; @@ -13,8 +14,6 @@ import org.springframework.cloud.bus.jackson.RemoteApplicationEventScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import java.util.UUID; - /** * 消息队列配置类 * @@ -33,7 +32,14 @@ public class RabbitMqConfig { return rabbitAdmin; } - + /** + * 注入获取token过滤器 + * @return + */ + @Bean + public TransmitUserTokenFilter transmitUserInfoFromHttpHeader(){ + return new TransmitUserTokenFilter(); + } @Bean public SimpleMessageListenerContainer messageListenerContainer(ConnectionFactory connectionFactory) { diff --git a/jeecg-boot/jeecg-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/core/BaseRabbiMqHandler.java b/jeecg-boot/jeecg-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/core/BaseRabbiMqHandler.java index 7687e66..2c0c2fd 100644 --- a/jeecg-boot/jeecg-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/core/BaseRabbiMqHandler.java +++ b/jeecg-boot/jeecg-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/core/BaseRabbiMqHandler.java @@ -2,15 +2,24 @@ package org.jeecg.boot.starter.rabbitmq.core; import com.rabbitmq.client.Channel; import lombok.extern.slf4j.Slf4j; + import org.jeecg.boot.starter.rabbitmq.listenter.MqListener; +import org.jeecg.common.config.mqtoken.UserTokenContext; import java.io.IOException; +/** + * + * @author zyf + */ @Slf4j public class BaseRabbiMqHandler<T> { + private String token= UserTokenContext.getToken(); + public void onMessage(T t, Long deliveryTag, Channel channel, MqListener mqListener) { try { + UserTokenContext.setToken(token); mqListener.handler(t, channel); channel.basicAck(deliveryTag, false); } catch (Exception e) {