Код IT
← Каталог

Первые шаги к микросервисам — Сервис обработки заказов на Java

Фрагмент из «Первые шаги к микросервисам»: Сервис обработки заказов на Java.

java infra-securityencyclopedia8-05-mikroservisy-i-integratsiya-101 embed URL статья в энциклопедии
Java main.java
package com.example.orderservice.service;

import com.example.orderservice.model.Order;
import com.example.orderservice.model.Order.OrderStatus;
import com.example.orderservice.repository.OrderRepository;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class OrderProcessingService {

    @Autowired
    private OrderRepository orderRepository;

    @Autowired
    private RabbitTemplate rabbitTemplate;

    private static final String QUEUE_NAME = "order_events";

    public void processPendingOrders() {
        List<Order> pendingOrders = orderRepository.findByStatusOrderByCreatedAtAsc(OrderStatus.PENDING);
        
        for (Order order : pendingOrders) {
            try {
                order.setStatus(OrderStatus.PROCESSING);
                orderRepository.save(order);
                
                // Имитация обработки
                Thread.sleep(1000);
                
                order.setStatus(OrderStatus.COMPLETED);
                orderRepository.save(order);
                
                // Отправка события
                rabbitTemplate.convertAndSend("", QUEUE_NAME, 
                    String.format("{\"orderId\": %d, \"status\": \"%s\"}", order.getId(), order.getStatus()));
                    
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                order.setStatus(OrderStatus.FAILED);
                orderRepository.save(order);
            }
        }
    }
}
package com.example.orderservice.service;

import com.example.orderservice.model.Order;
import com.example.orderservice.model.Order.OrderStatus;
import com.example.orderservice.repository.OrderRepository;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class OrderProcessingService {

    @Autowired
    private OrderRepository orderRepository;

    @Autowired
    private RabbitTemplate rabbitTemplate;

    private static final String QUEUE_NAME = "order_events";

    public void processPendingOrders() {
        List<Order> pendingOrders = orderRepository.findByStatusOrderByCreatedAtAsc(OrderStatus.PENDING);
        
        for (Order order : pendingOrders) {
            try {
                order.setStatus(OrderStatus.PROCESSING);
                orderRepository.save(order);
                
                // Имитация обработки
                Thread.sleep(1000);
                
                order.setStatus(OrderStatus.COMPLETED);
                orderRepository.save(order);
                
                // Отправка события
                rabbitTemplate.convertAndSend("", QUEUE_NAME, 
                    String.format("{\"orderId\": %d, \"status\": \"%s\"}", order.getId(), order.getStatus()));
                    
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                order.setStatus(OrderStatus.FAILED);
                orderRepository.save(order);
            }
        }
    }
}