当前位置: 首页 > 知识库问答 >
问题:

用RabbitMQ实现Spring云流连接

丁鸿信
2023-03-14
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
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);
    }
}

共有1个答案

丁毅庵
2023-03-14

要使用rabbitmq绑定器实现来设置spring cloud stream,您需要在pom.xml1中进行配置

 <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

helloBinding.greeting().send(MessageBuilder
                .withPayload(...)
                .build());
 类似资料:
  • 我使用RabbitMQ网络创建了一个主题交换UITX并绑定到交换两个队列TX. Q1和TX. Q2,每个队列都相应地绑定了路由密钥rk1和rk2,并向交换产生了少量消息。 现在,我想使用Spring Cloud Stream创建一个消费者,它只从Q1获取消息。我尝试使用配置: 以及使用消息的方法的注释。 因此,我可以看到使用者创建了一个同名TX.Q1的队列(或绑定),但新队列/绑定的路由键是# 如

  • 我正在用Spring编写一个服务,并使用Spring AMQP连接到Rabbitmq。 我有两个rabbitmq集群,一个仅用于发布消息(消息通过联合插件发送到另一个集群),另一个集群用于声明最终用户将从中使用的队列。 节点位于aws lb后面,每个集群有一个lb。 我在代码中使用CachingConnectionFactory和RabbitTemboard、RabbitAdmin,我希望与所有节

  • 更新:将非工作版本发布到https://github.com/justsomecoder/boot-rabbit-issue 我正在尝试实现一些基本的RabbitMQ发送和接收功能,但似乎无法让它在我的Spring Boot项目中运行。虽然我尝试了多个示例,但到目前为止,我在https://spring.io/guides/gs/messaging-rabbitmq/实现了该示例,唯一的例外是我在

  • 我无法使用功能供应商发送Avro消息。SCSt尝试将消息作为JSON发送,但失败。有人能指出是否需要任何其他配置吗? 这是供应商的功能bean 和配置

  • 假设我希望实现与在spring-amqp函数周围使用时基本相同的功能: 在Rabbit绑定器中使用Spring Cloud Stream时,是否必须手动将消息访问到RabbitMQ? 如果是,如何实现?

  • 我正在使用Spring Cloud Stream和RabbitMq在不同的微服务之间交换消息。 这是我发布消息的设置。 . 以及接收消息的设置 . 我能够成功地使用此设置交换消息。我希望,发送消息和接收消息的ID是相等的。但它们总是不同的UUID。 有没有一种方法可以让消息从生产者通过RabbitMq一直保持相同的ID到消费者?