我正在开发 Spring Boot 应用程序,我必须使用 RabbitMQ 作为消息代理。我没有在本地主机上使用 RabbitMQ,而是使用以下命令从 docker hub 使用 docker 镜像
docker run -d --name rabbit-name-management -p 15672:15672 -p 5672:5672 -p 15671:15671 -p 5671:5671 -p 4369:4369 rabbitmq:3-management
Run Code Online (Sandbox Code Playgroud)
所以它拉取图像并作为 docker 容器成功运行。
现在在我的 Spring Boot 应用程序中,我使用一个application.properties文件来连接,RabbitMQ如下所示:
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=*****
spring.rabbitmq.password=********
Run Code Online (Sandbox Code Playgroud)
我的spring boot docker文件
FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY encryptionKey.jks encryptionKey.jks
COPY UnlimitedJCEPolicyJDK8/* /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/
COPY target/ConfigServer-0.0.1-SNAPSHOT.jar ConfigServer.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","ConfigServer.jar"]
Run Code Online (Sandbox Code Playgroud)
我使用命令docker inspect <RABBITMQ_CONTAINER_ID>找出运行RabbitMQ的机器的IP地址。为了让它与 RabbitMQ 通信,我使用环境变量来覆盖 localhost 与运行 RabbitMQ 的容器的实际 IP 地址。docker 命令如下
docker run -p 8012:8012 -e …Run Code Online (Sandbox Code Playgroud) 我想将我的 spring mvc 应用程序与 Kafka 服务器连接以使用 kafka 消息。为此,我编写了 KafkaConsumer 类,如下所示。
@Service
public class KafkaConsumer {
@KafkaListener(groupId = "my-group-id", topicPattern = "VID.*", containerFactory = SystemParameterConstants.KAFKA_LISTENER_CONTAINER_FACTORY)
public void receivedMessage(@Payload String message) {
logger.info("================ receivedMessage() ==================");
logger.info("::: Message recieved from kafka ::: {}", message);
ObjectMapper objectMapper = new ObjectMapper();
try {
...
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里我有硬编码的组ID “my-group-id”,但我想从数据库读取这个groupId,以便我可以为不同的环境拥有不同的groupId。
请提出一个解决方案。谢谢!