我们正在工业化我们的第一个微服务应用程序,该应用程序主要使用 Spring Boot 2 构建。我们目前使用 Spring Cloud Zuul 进行路由,使用 Eureka 进行服务发现。
我们希望在 AWS 上使用 Kubernetes(使用 EKS)。我的问题是运行 Eureka 和 Zuul 进行服务发现/路由仍然有价值,或者它们可以被 Kubernetes 取代吗?
我正在使用 Spring Boot 2.1.4 和Spring Data Jest以及 ElasticSearch。我最初使用 Java Date 来获取一些带有以下注释的属性:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
Run Code Online (Sandbox Code Playgroud)
这将保存到 ElasticSearch 中,如下所示:
"creationDate": "2019-04-10T14:49:05.672+0000"
Run Code Online (Sandbox Code Playgroud)
现在,我正在从 Date 迁移到 LocalDateTime 和 ZonedDateTime。当数据现在保存到 ElasticSearch 时,我会保存以下属性:
"creationDate": {
"dayOfYear": 123,
"dayOfWeek": "FRIDAY",
"month": "MAY",
"dayOfMonth": 3,
"year": 2019,
"monthValue": 5,
"hour": 11,
"minute": 54,
"second": 12,
"nano": 238000000,
"chronology": {
"id": "ISO",
"calendarType": "iso8601"
}
},
Run Code Online (Sandbox Code Playgroud)
我需要做什么来更改它,以便获得与之前的 LocalDateTime 和 ZonedDateTime 相同的 ElasticSearch 数据格式?
我已经尝试过以下方法:
自定义对象映射器如下:
public class CustomEntityMapper implements EntityMapper {
private final ObjectMapper objectMapper; …
Run Code Online (Sandbox Code Playgroud)我正在使用 Spring Boot 2.1.3 并尝试配置 SpringSeekToCurrentErrorHandler
将DeadLetterPublishingRecoverer
错误记录发送到不同的主题。创建新的 DLT 队列并插入一条记录,但消息正文为空。我期望消息正文中填充原始 JSON 正文以供将来分析。
这是我到目前为止的配置。知道我哪里出错了吗?不确定它是否与使用kafkaTemplate<Object, Object>
消息生产者使用的位置有关kafkaTemplate<String, Message>
。
@Configuration
@EnableKafka
public class ListenerConfig {
@Value("${kafka.bootstrap-servers}")
private String bootstrapServers;
@Autowired
private KafkaTemplate<Object, Object> kafkaTemplate;
@Bean
public Map<String, Object> consumerConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, ErrorHandlingDeserializer2.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, ErrorHandlingDeserializer2.class);
props.put(ErrorHandlingDeserializer2.KEY_DESERIALIZER_CLASS, JsonDeserializer.class);
props.put(ErrorHandlingDeserializer2.VALUE_DESERIALIZER_CLASS, JsonDeserializer.class.getName());
props.put(JsonDeserializer.KEY_DEFAULT_TYPE, "java.lang.String");
props.put(JsonDeserializer.VALUE_DEFAULT_TYPE, "com.test.kafka.Message");
props.put(JsonDeserializer.TRUSTED_PACKAGES, "com.test.kafka");
props.put(ConsumerConfig.GROUP_ID_CONFIG, "json");
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
return props;
}
@Bean
public ConsumerFactory<String, Message> consumerFactory() {
return new DefaultKafkaConsumerFactory<>( …
Run Code Online (Sandbox Code Playgroud) 我正在将我的一些应用程序移至微服务。一个示例服务是RSS搜寻器,它使用Spring Integration将项目发送到Kafka。我还看到有Spring Cloud Data Flow,它在后台使用了Spring Integration和Spring Batch。
如果我使用Spring Cloud Data Flow,我会在每个微服务中使用它还是将其用作微服务之间的编排?
我正在尝试了解引入Spring Cloud Data Flow的好处,而不是使用Spring Integration保持微服务尽可能轻便。
任何意见,将不胜感激。
我是微服务架构的新手,想要创建一个集中式通知微服务来向用户发送电子邮件/短信。
我的第一个选择是创建一个通知 Kafka 队列,所有其他微服务都可以向其中发送通知。然后,通知微服务将侦听该队列并相应地发送消息。如果通知服务重新启动或关闭,我们不会丢失任何消息,因为消息将存储在队列中。
我的第二个选择是在通知微服务上添加通知消息 API。这将使所有其他微服务变得更容易,因为它们只需调用 API,而不需要与队列集成。然后,API 会在内部将消息发送到通知 Kafka 队列并发送消息。这里唯一的问题是,如果 API 不可用或出现错误,我们将丢失消息。
关于处理这个问题的最佳方法有什么建议吗?
我有一个关于在 Python 中使用 Google Cloud Functions 创建简单 REST API 的一般查询。最佳实践是为每个端点创建一个 HTTP 函数还是创建一个处理所有端点的函数?
还可以为该函数使用自定义 URL,例如 /api/v1/pets/
我正在考虑使用新的 Spring 授权服务器。我已经让示例正常工作,并了解了如何验证测试用户,但对应该在哪里添加用户注册功能有疑问。
是否应该将其添加到授权服务器或其他单独的服务(例如用户配置文件)中?如果是后者,我想我必须将身份验证服务器连接到用户数据库。
理想情况下,我希望用户单击登录按钮,他们将被带到身份验证服务器上的登录页面。如果他们没有帐户,他们会创建一个帐户,然后使用令牌将他们带回应用程序。
我正在查看openid connect 发起用户注册规范,但认为它尚未实现。