• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

orderService도 rabbitmq를 어디선가 사용하나요??

24.02.25 22:20 작성 24.02.25 23:02 수정 조회수 167

0

 

order-service의 application.yml를 살펴보고, 다른부분을 살펴봐도 rabbitmq관련 설정이나, 코드는 전혀없던데 다른곳에서 자동으로 사용하는건가요??

 -e "spring.rabbitmq.host=rabbitmq" 

왜 rabbitmq 설정을 추가해야만 위 로그가 안뜨는지 질문드립니다. 그리고 왜 동일한 설정으로 local로 실행할때는 위 로그가 안뜨다가 왜 docker로 실행할때만 뜨는걸까요??

server:
  port: 0

spring:
  application:
    name: order-service
  datasource:
    driverClassName: org.h2.Driver
#    url: jdbc:h2:mem:testdb
#    username: sa
#    password:
    url: jdbc:mariadb://localhost:3306/mydb
    driver-class-name: org.mariadb.jdbc.Driver
    username: root
    password: test1357
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
  h2:
    console:
      enabled: true
      settings:
        web-allow-others: true
      path: /h2-console
  cloud:
    openfeign:
      micrometer:
        enabled: true

eureka:
  instance:
    instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
  register-with-eureka: true
  fetch-registry: true
  service-url:
    defaultZone: http://127.0.0.1:8761/eureka


logging:
  level:
    com.example.orderservice.client: DEBUG
  pattern:
    level: '%5p [%X{traceId:-}-%X{spanId:-}]'

management:
  tracing:
    sampling:
      probability: 1.0
    propagation:
      consume: B3
      produce: B3_MULTI
  zipkin:
    tracing:
      endpoint: "http://localhost:9411/api/v2/spans"
  endpoints:
    web:
      exposure:
        include: refresh, health, beans, busrefresh, info, metrics, prometheus


application.yml파일입니다

 

답변 2

·

답변을 작성해보세요.

0

안녕하세요, 이도원입니다.

강의에서 사용된 프로젝트에서는 spring-cloud-bus 기능을 위해 RabbitMQ를 사용하고 있습니다. 아래와 같은 Dependency를 추가하기 되면, rabbitmq.host 설정을 하지 않아도 기본적인 locahots:5672로 접속을 시도하게 됩니다.

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

따라서, Local에서 직접 order-service를 실행할 때에도 localhsot:5672로 기동되는 Docker나 실제 서비스 형태의 Rabbitmq 서비스가 작동 중이어야 로그에 "Caused by: java.net.ConnectException: Connection refused" 에러가 발생하지 않습니다.

spring:
  application:
    name: order-service
#  rabbitmq:
#    host: 127.0.0.1
#    port: 5672
#    username: guest
#    password: guest

만얀 order-service를 도커로 기동하실 때에는 기본 rabbitmq:host=localhost 로 실행되는 부분이 localhost가 order-service를 지칭하는 것이기 때문에, 접속 오류가 계속 발생하게 됩니다. 따라서 이때는 Rabbitmq 서비스의 정확한 위치를 지정해 주어야 하는데, order-service가 기동되는 Docker network에 이미 Rabbitme 서비가 "rabbitmq"라는 이름으로 기동되어 있기 때문에, rabbitmq:host=rabbitbq 라는 이름으로 명시적인 설정을 해야 오류가 발생하지 않을 것 같습니다.

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.27

안녕하세요, 인프런 AI 인턴입니다.

도커에서 order-service를 실행할 때 로그에 localhost:5672로 연결을 시도하는 것은 RabbitMQ가 기본적으로 사용하는 AMQP 프로토콜의 포트입니다. 로컬 환경에서는 해당 로그가 발생하지 않는 이유는 order-service 설정에 RabbitMQ 서버에 대한 정보가 포함되어 있지 않거나, RabbitMQ 서버가 로컬에 실행되고 있지 않아서 아무 연결 시도가 이루어지지 않기 때문일 수 있습니다.

그러나 도커 환경에서는 order-service가 RabbitMQ 서버와 통신하려고 할 때 해당 서버가 없거나 연결 정보가 잘못되었거나, order-service에 필요한 RabbitMQ 설정이 누락되었을 때 Connection refused 와 같은 연결 오류가 발생할 수 있습니다.

-e "spring.rabbitmq.host=rabbitmq"를 추가함으로써 위의 로그가 사라지는 것은 이 환경 변수를 통해 order-service에게 RabbitMQ 호스트의 주소를 명시적으로 알려주고 그 서버와 연결을 시도하기 때문입니다. 이 경우 spring.rabbitmq.host를 통해 order-servicerabbitmq라는 호스트 이름으로 RabbitMQ 서버에 연결을 시도합니다. 도커 환경에서는 호스트 이름을 사용하여 다른 컨테이너에 있는 서비스에 접근하는 것이 일반적입니다.

결론적으로, order-service에서 RabbitMQ 관련 설정이나 코드가 보이지 않는다면, 자동으로 RabbitMQ를 사용하는 것은 아니며, 해당 서비스가 RabbitMQ를 요구하는 다른 라이브러리나 의존성을 가지고 있는지 확인해야 합니다. 예를 들어, spring-cloud-starter-stream-rabbit이나 spring-boot-starter-amqp 같은 의존성이 포함되어 있지 않은지 살펴보세요.

제공된 application.yml 파일에서도 RabbitMQ 또는 AMQP 설정은 보이지 않습니다. RabbitMQ를 사용하려면 spring.rabbitmq.* 속성을 설정 파일에 포함시켜야 합니다. 예를 들어, 이 문서의 첫 번째 정보에 있는 것처럼, RabbitMQ 호스트, 포트, 사용자 이름, 비밀번호 설정을 추가할 수 있습니다.

참고로 application.yml 파일만으로는 RabbitMQ가 사전에 구성되어 있거나 자동으로 사용되고 있는지 여부를 확인하기 어렵습니다. 기본적으로 Spring Boot 애플리케이션은 클래스패스(classpath)에 위치한 라이브러리 및 스타터(starter)에 따라 자동 구성됩니다. 이 덕분에 RabbitMQ를 사용하기 위한 추가 설정이나 코드가 필요하지 않을 수도 있지만, 명시적인 구성이나 의존성 추가 없이는 자동으로 연결되지는 않습니다.

질문에 있는 로그 문제가 해결되지 않는다면, 프로젝트의 의존성 및 다른 설정 파일들도 확인하시고, 필요하다면 RabbitMQ 서버 설정을 application.yml에 추가해야 할 수 있습니다.