【问题标题】:Spring Cloud Stream connection with RabbitMQSpring Cloud Stream 与 RabbitMQ 的连接
【发布时间】:2020-04-18 17:57:41
【问题描述】:

有一个简单的 Spring-Cloud-Stream 项目,我尝试与 RabbitMQ 连接,它说它的 connected 但它不起作用。我在代码中做错了吗?

Application.properties

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.cloud.stream.bindings.greetingChannel.destination = greetings
server.port=8080

HelloBinding 接口

package com.gateway.cloudstreamproducerrabbitmq;

import org.springframework.cloud.stream.annotation.Input;
import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.SubscribableChannel;

public interface HelloBinding {

    @Output("greetingChannel")
    MessageChannel greeting();
}

生产者控制器

package com.gateway.cloudstreamproducerrabbitmq;

import com.gateway.cloudstreamproducerrabbitmq.HelloBinding;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProducerController {

    private MessageChannel greet;

    public ProducerController(HelloBinding binding) {
        greet = binding.greeting();
    }

    @GetMapping("/greet/{name}")
    public void publish(@PathVariable String name) {
        String greeting = "Hello, " + name + "!";
        Message<String> msg = MessageBuilder.withPayload(greeting)
                .build();
        this.greet.send(msg);
    }
}

最后我在启动应用程序的主类中有一个 @EnableBinding(HelloBinding.class)

【问题讨论】:

  • 这看起来像 this 的副本,或者,您现在看到控制台上的连接了吗?您确定您正在寻找正确的代理/集群吗?显然,连接已建立。您是否查看过与netstatwireshark 等的联系? “不工作”永远是不够的信息。
  • 是的,它几乎是重复的,我想用另一种方式描述它,在我想删除另一个但我找不到删除按钮之后。

标签: java spring rabbitmq connection spring-cloud-stream


【解决方案1】:

要使用rabbitmq binder实现设置spring cloud stream,你需要在你的pom.xml中配置它 1.

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream</artifactId>
 </dependency>
 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
 </dependency>
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
 </dependency>

然后你在你的 application.properties/yaml 中定义它

2.

spring:
    cloud:
        stream:
            bindings:
                greetingChannel
                    destination: test.greeting
                    group: queue
            rabbit:
                bindings:
                    greetingChannel:
                        producer:
                            transacted: true //optional

  1. EnableBinding(HelloBinding.class)
  2. 注入绑定并使用它
helloBinding.greeting().send(MessageBuilder
                .withPayload(...)
                .build());
  1. rabbitMQ 属性设置

【讨论】:

  • 嗨,我发现了问题。在我的 PC 上运行了一个我什至不知道存在的 RabbitMQ 进程,它首先连接到那个,而不是我在 Docker 上运行的那个。这解决了问题。此解决方案有效(如果我有 1 个进程正在运行)所以我将其标记为解决方案,谢谢
猜你喜欢
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 1970-01-01
相关资源
最近更新 更多