Woody 1 週間 前
コミット
130b645209

+ 22 - 25
framework-kafka/src/main/java/com/chelvc/framework/kafka/fallback/KafkaMemorySender.java

@@ -40,26 +40,28 @@ public class KafkaMemorySender<K, V> extends KafkaFallbackSender<K, V> {
     /**
      * 初始化消息队列
      */
-    private synchronized void initializeMessageQueue() {
-        if (this.queue != null) {
-            return;
-        }
-
-        this.queue = new ArrayBlockingQueue<>(this.capacity);
-        this.consumer = ThreadUtils.consume(this.queue, pair -> {
-            ProducerRecord<K, V> message = pair.getLeft();
-            SessionContextHolder.setSession(pair.getRight());
-            try {
-                this.delegate.send(message);
-                return true;
-            } catch (Exception e) {
-                log.error("Kafka message send failed: {}", message.topic(), e);
-            } finally {
-                SessionContextHolder.removeSessionContext();
+    private void initializeMessageQueue() {
+        if (this.queue == null) {
+            synchronized (this) {
+                if (this.queue == null) {
+                    this.queue = new ArrayBlockingQueue<>(this.capacity);
+                    this.consumer = ThreadUtils.consume(this.queue, pair -> {
+                        ProducerRecord<K, V> message = pair.getLeft();
+                        SessionContextHolder.setSession(pair.getRight());
+                        try {
+                            this.delegate.send(message);
+                            return true;
+                        } catch (Exception e) {
+                            log.error("Kafka message send failed: {}", message.topic(), e);
+                        } finally {
+                            SessionContextHolder.removeSessionContext();
+                        }
+                        ThreadUtils.sleep(5000);
+                        return false;
+                    });
+                }
             }
-            ThreadUtils.sleep(5000);
-            return false;
-        });
+        }
     }
 
     @Override
@@ -68,12 +70,7 @@ public class KafkaMemorySender<K, V> extends KafkaFallbackSender<K, V> {
             log.debug("Kafka fallback message: {}, {}", record.topic(), record.value());
         }
 
-        // 初始化消息队列
-        if (this.queue == null) {
-            this.initializeMessageQueue();
-        }
-
-        // 将消息放入内存消息队列
+        this.initializeMessageQueue();
         Session session = SessionContextHolder.getSession(false);
         if (!this.queue.offer(Pair.of(record, session))) {
             throw new RuntimeException("Kafka fallback queue is full: " + record.topic() + ", " + record.value());

+ 1 - 1
framework-kafka/src/main/java/com/chelvc/framework/kafka/fallback/KafkaStoreClient.java

@@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.RequestBody;
  * @author Woody
  * @date 2024/12/19
  */
-@FeignClient(value = "${spring.kafka.fallback-store-server:kafka}")
+@FeignClient(value = "${spring.kafka.fallback-store-server}")
 public interface KafkaStoreClient {
     /**
      * 保存Kafka降级消息