// Producer const { Kafka } = require('kafkajs'); const kafka = new Kafka({ clientId: 'my-app', brokers: ['localhost:9092'] }); const producer = kafka.producer(); await producer.send({ topic: 'order-created', messages: [{ value: JSON.stringify({ orderId: 123 })}] }); // Consumer const consumer = kafka.consumer({ groupId: 'notifications' }); await consumer.subscribe({ topic: 'order-created' }); await consumer.run({ eachMessage: async ({ message }) => { console.log('Received:', message.value.toString()); } });
Когда использовать | Транзакционные системы, реальные обновления данных |
---|---|
Сложность | Высокая (требует настройки брокера сообщений) |
// OrderServiceApplication.java @SpringBootApplication @EnableDiscoveryClient public class OrderServiceApplication { public static void main(String[] args) { SpringApplication.run(OrderServiceApplication.class, args); } } // OrderController.java @RestController @RequestMapping("/orders") public class OrderController { @Autowired private PaymentServiceClient paymentClient; @PostMapping public Order createOrder(@RequestBody Order order) { // Взаимодействие с другим сервисом через Feign Payment payment = paymentClient.processPayment(order); return orderRepository.save(order); } }
// index.js (Lambda Function) const AWS = require('aws-sdk'); const s3 = new AWS.S3(); exports.handler = async (event) => { const bucket = event.Records[0].s3.bucket.name; const key = event.Records[0].s3.object.key; // Обработка файла const data = await s3.getObject({ Bucket: bucket, Key: key }).promise(); console.log('File content:', data.Body.toString()); return { statusCode: 200 }; };
Триггеры | S3 Upload, API Gateway, CloudWatch Events |
---|---|
Лимиты | 15 мин время выполнения, 10GB RAM |
// Command Handler public class CreateOrderHandler : ICommandHandler<CreateOrderCommand> { private readonly EventStore _eventStore; public async Task Handle(CreateOrderCommand command) { var events = new List<IEvent> { new OrderCreatedEvent(command.OrderId, command.Items) }; await _eventStore.AppendEvents(events); } } // Query Service public class OrderQueryService { public Order GetOrder(Guid orderId) { // Чтение из оптимизированной для запросов БД return _readDatabase.Orders.Find(orderId); } }