本周精心挑选六篇Java和Spring博客

精心挑选了一些值得一读的有趣的 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 = "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 记录凭借静态类型的优势为我们带来了新的便利。