本週精心挑選六篇Java和Spring部落格

banq發表於2024-05-20

精心挑選了一些值得一讀的有趣的 Java 和 Spring 文章。這些文章包括容錯、多個休息請求、混合雲策略、自動化 Java 測試、2fa 安全、面向對映程式設計等主題。

1. 在 Java 中呼叫微服務
本文全面概述了在 Java 中呼叫微服務的最佳實踐和實用解決方案,旨在幫助開發人員在微服務架構實現中做出明智的決策。

  • 使用 HttpURLConnection實現基本 HTTP 請求:在 Java 中呼叫微服務的最簡單方法是使用HttpURLConnection類。這使您的應用程式可以直接傳送 HTTP 請求並接收響應。
  • 使用Apache HttpClient:它支援許多高階功能,例如連線池,這意味著它可以有效地處理許多請求、身份驗證和處理代理。
  • 使用Spring的RestTemplate和WebClient:
  • 將 Feign 用於宣告式 REST 客戶端:Feign 是一個工具,可讓您編寫非常簡單的程式碼,透過定義介面來進行 HTTP 呼叫。

最佳實踐和常見錯誤
  • 使用連線池:效能更好。
  • 實施錯誤處理:使用重試、超時和斷路器來使您的應用程式更加可靠。
  • 選擇支援良好的庫,例如 Apache HttpClient 或 WebClient,而不是自己管理 HTTP 連線。
  • 密切關注您的 HTTP 流量:記錄請求和響應有助於除錯問題。
  • 保護您的 HTTP 請求:使用 HTTPS 和正確的身份驗證方法。

2. 在 Spring Boot 和 Kafka 中啟用跟蹤的指南
本文強調,在 Spring Boot 和 Kafka 中啟用跟蹤對於維護和最佳化現代分散式系統至關重要。透過遵循該指南,開發人員可以更深入地瞭解其應用程式,從而提高效能和可靠性。

對於希望使用 Spring Boot 和 Kafka 在微服務架構中實現強大的跟蹤機制的開發人員來說,本指南是寶貴的資源。

儲存庫將包含所有程式碼。

如果我們透過api 釋出訊息,我們應該在消費者中看到。
雖然我們可以看到訊息進入 Kafka 以及消費者。

  • 但是:這些訊息只是訊息物件的字串表示形式。並且沒有跟蹤標頭。
  • 預設情況下只配置了字串序列化器,無法實現Json序列號

方法#1:
我們可以為 messageKafkaTemplate 建立一個自定義 Bean,並在那裡配置 json 序列化器

方法#2
為此,我們不必建立任何自定義 bean。只需從 spring 屬性檔案配置預設值序列化器

spring:
  application:
    name: @project.artifactId@
  kafka:
    bootstrap-servers: localhost:9092
    producer:
      value-serializer: org.springframework.kafka.support.serializer.JsonSerializer


雖然我們可以在消費者中接收發布者釋出的訊息,但它沒有列印跟蹤 ID:

  • 透過分析日誌來檢視跟蹤 ID 以及它們是否傳播到不同的服務。
  • 我們可以使用 zipkin 或 jaeger 等工具來更好地理解。

實現列印跟蹤 ID的兩個步驟:
第一步:我們必須在 kafka 模板中開啟觀察才能釋出帶有跟蹤上下文的訊息。我們需要對消費者做類似的事情。我們必須宣告一個容器工廠 bean,我們可以在其中自定義消費者工廠屬性以啟用觀察。像這樣:

   @Bean
    public ConcurrentKafkaListenerContainerFactory<String, Message> messageContainerFactory(
            ConsumerFactory<String, Message> messageConsumerFactory) {

        ConcurrentKafkaListenerContainerFactory<String, Message> factory =
                new ConcurrentKafkaListenerContainerFactory<>();

        factory.getContainerProperties().setObservationEnabled(true);

        factory.setConsumerFactory(messageConsumerFactory);

        return factory;
    }

最後一步是告訴 kafka 監聽器使用這個容器工廠,而不是預設的容器工廠,就像這樣:

@KafkaListener(topics = <font>"topic-message", groupId = "message-consumer-group", containerFactory = "messageContainerFactory")
   public void consumeMessage(@Payload Message message) {
        log.info(
"Consumed kafka message {}", message);
}


3. Java 中使用 Failsafe 的容錯
Failsafe 庫是一個向 Java 應用程式新增容錯功能的強大工具。透過利用其功能,開發人員可以建立能夠優雅地處理故障的彈性系統,確保高可用性和可靠性。

本指南有效演示瞭如何實現和配置Failsafe,為增強Java應用程式的容錯能力提供了實際示例和最佳實踐。


4. 如何在 CompletableFuture 中進行多個 REST 呼叫
本文的結論是,這CompletableFuture是一個在 Java 中進行並行非同步呼叫的強大工具,在 REST API 上下文中非常有用。它提供了必要的工具和示例來實現高效、健壯的非同步操作,從而提高應用程式的效能和響應能力。


5. 保護 Spring Boot 堡壘:2FA 方法指南
將 2FA 新增到 Spring Boot 應用程式可顯著增強安全性。透過實施 TOTP、SMS 或基於電子郵件的 2FA 等方法,開發人員可以保護敏感使用者資料並提高整體應用程式安全性。遵循最佳實踐可確保穩健且使用者友好的 2FA 實施。

6. Java 中的面向對映(Map-Oriented)程式設計
面向對映的程式設計是資料操作和轉換的強大範例,具有可讀性、表達性和並行性等優點。透過利用 Java 的 Stream API,開發人員可以實現 MOP 概念,為資料處理任務編寫乾淨、高效且可維護的程式碼。

Map是一把錘子。這是一個非常有用和方便的工具,但我們過多地依賴它Map作為通用工具和靈活的返回型別。 Java 記錄憑藉靜態型別的優勢為我們帶來了新的便利。

 

相關文章