1. Reactive Programming (Spring WebFlux)
📌 Когда использовать:
- очень много одновременных соединений (чат, стриминг, IoT),
- нужен неблокирующий ввод-вывод,
- API с высокой нагрузкой.
📄 Зависимость:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>📄 Контроллер:
@RestController
@RequestMapping("/api/reactive")
class ReactiveController {
@GetMapping("/numbers")
public Flux<Integer> numbers() {
return Flux.range(1, 5).delayElements(Duration.ofSeconds(1));
}
@GetMapping("/user/{id}")
public Mono<User> getUser(@PathVariable Long id) {
return Mono.just(new User(id, "Vitaliy"));
}
}Mono<T> → один объект (аналог Optional)
Flux<T> → поток объектов (аналог Stream)
2. Messaging (RabbitMQ / Kafka)
RabbitMQ (AMQP)
📄 Зависимость:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>📄 Конфиг:
@Configuration
public class RabbitConfig {
@Bean
Queue queue() { return new Queue("demo-queue", false); }
}📄 Продюсер:
@Service
@RequiredArgsConstructor
public class Producer {
private final AmqpTemplate template;
public void send(String msg) {
template.convertAndSend("demo-queue", msg);
}
}📄 Консьюмер:
@Service
public class Consumer {
@RabbitListener(queues = "demo-queue")
public void receive(String msg) {
System.out.println("Received: " + msg);
}
}Kafka
📄 Зависимость:
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>📄 Продюсер:
@Service
@RequiredArgsConstructor
public class KafkaProducer {
private final KafkaTemplate<String, String> template;
public void send(String msg) {
template.send("demo-topic", msg);
}
}📄 Консьюмер:
@Service
public class KafkaConsumer {
@KafkaListener(topics = "demo-topic", groupId = "group1")
public void listen(String msg) {
System.out.println("Received: " + msg);
}
}📌 Kafka → для high-throughput событийных систем.
📌 RabbitMQ → для классического очередного взаимодействия.
3. GraphQL
📌 Используется для более гибких API вместо REST.
📄 Зависимость:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-graphql</artifactId>
</dependency>📄 Schema (src/main/resources/graphql/schema.graphqls):
type Query {
user(id: ID!): User
users: [User]
}
type User {
id: ID!
name: String
}📄 Контроллер:
@Controller
public class UserGraphQL {
@QueryMapping
public User user(@Argument Long id) {
return new User(id, "Vitaliy");
}
@QueryMapping
public List<User> users() {
return List.of(new User(1L, "Ann"), new User(2L, "Bob"));
}
}📌 Тестируем через GraphiQL → http://localhost:8080/graphiql.
4. Микросервисы (Spring Cloud)
Компоненты:
- Spring Cloud Config → конфигурации,
- Eureka → сервис-дискавери,
- Spring Cloud Gateway → API-шлюз,
- Resilience4j → Circuit Breaker,
- Sleuth + Zipkin → распределённый трейсинг.
Пример: Eureka Server
📄 Зависимость:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>📄 Запуск:
@EnableEurekaServer
@SpringBootApplication
public class EurekaServer {}Клиент:
@EnableEurekaClient
@SpringBootApplication
public class DemoService {}5. Keycloak / Auth0 (SSO)
📌 Для единой авторизации (OAuth2 / OpenID Connect).
Keycloak Integration
📄 application.yml:
spring:
security:
oauth2:
resourceserver:
jwt:
issuer-uri: http://localhost:8080/realms/demo📄 Контроллер:
@RestController
public class SecureController {
@GetMapping("/secure")
public String secure(Principal principal) {
return "Hello, " + principal.getName();
}
}📌 Теперь доступ → только с JWT токеном от Keycloak.
6. Event-Driven + Saga Pattern
📌 Для сложных бизнес-транзакций в микросервисах (например, заказ → оплата → доставка). Используются:
- Kafka/RabbitMQ для событий,
- Orchestration (Camunda, Temporal),
- или Choreography (каждый сервис реагирует на события).
7. Best Practices
- ✅ Если нужна высокая нагрузка → WebFlux.
- ✅ Если микросервисы → Spring Cloud + Eureka + Gateway.
- ✅ Для интеграции → Kafka (потоки) или RabbitMQ (очереди).
- ✅ Для API нового поколения → GraphQL.
- ✅ Для безопасности в enterprise → Keycloak**/Auth****0**.
- ✅ Для мониторинга распределённых систем → Sleuth + Zipkin**/Jaeger**.