- channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - unknown delivery tag 1, class-id=60, method-id=80)
- 원인 :
- 기존에 생성된 큐의 설정과 현재 애플리케이션에서 설정하려는 큐의 속성이 일치하지 않아서 발생함.
- 특히 메시지 승인 과정에서 일반적으로 발생하는데, Quere를 선언하는 부분이 두곳이었고, 다른 클래스로 큐가 선언되고 있었음.
- 해결 : 큐는 singleton으로 구현되어야 하기 때문에, 큐 설정을 다르게 하고 같은 이름을 쓰거나 두 곳에서 중복적으로 선언하면 오류가 남.
- Publisher와 Producer 통합.
- 원인 :
package com.gameservice.create_game_resource_service.messaging;
import com.gameservice.create_game_resource_service.config.RabbitMQConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.AmqpException;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class GameResourcePublisher {
private final RabbitTemplate rabbitTemplate;
public GameResourcePublisher(RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
}
public void sendMessage(String message) {
try {
rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, RabbitMQConfig.QUEUE_NAME, message);
log.info("Message sent successfully to exchange: {}", message);
} catch (AmqpException e) {
log.error("Failed to send message: {}", message, e);
}
}
}
package com.gameservice.create_game_resource_service.service;
import com.gameservice.create_game_resource_service.model.GameResourceCreationMessage;
import org.springframework.amqp.AmqpException;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j;
@Service
@Slf4j
public class RabbitMQProducer {
private final RabbitTemplate rabbitTemplate;
private static final String QUEUE_NAME = "game-resource-queue";
@Autowired
public RabbitMQProducer(RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
}
public void sendGameResourceCreationMessage(GameResourceCreationMessage message) {
try {
rabbitTemplate.convertAndSend(QUEUE_NAME, message);
} catch (AmqpException e) {
log.error("게임 리소스 생성 메시지를 큐에 전송 실패", e);
}
}
}
package com.gameservice.create_game_resource_service.messaging;
import com.gameservice.create_game_resource_service.config.RabbitMQConfig;
import com.gameservice.create_game_resource_service.model.GameResourceCreationMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.AmqpException;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class GameResourceProducer {
private final RabbitTemplate rabbitTemplate;
public GameResourceProducer(RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
}
public void sendMessage(String message) {
try {
rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, RabbitMQConfig.QUEUE_NAME, message);
log.info("Message sent successfully to exchange: {}", message);
} catch (AmqpException e) {
log.error("Failed to send message: {}", message, e);
}
}
public void sendGameResourceCreationMessage(GameResourceCreationMessage message) {
try {
rabbitTemplate.convertAndSend(RabbitMQConfig.QUEUE_NAME, message);
} catch (AmqpException e) {
log.error("게임 리소스 생성 메시지를 큐에 전송 실패", e);
}
}
}
'개발자 경험 & 팁' 카테고리의 다른 글
배치 처리 (0) | 2024.11.19 |
---|---|
git pull 실패 (0) | 2024.07.30 |
exception just for purpose of providing stack trace 오류 (0) | 2024.07.23 |
MariaDB 설치 오류 (0) | 2024.07.18 |