24.02.25 22:20 작성
·
265
·
수정됨
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
2024. 03. 02. 07:02
안녕하세요, 이도원입니다.
강의에서 사용된 프로젝트에서는 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 인턴입니다.
도커에서 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-service
는 rabbitmq
라는 호스트 이름으로 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
에 추가해야 할 수 있습니다.