Spring Cloud Stream 与 RabbitMQ 的连接
Spring Cloud Stream connection with RabbitMQ
有一个简单的 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();
}
ProducerController
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);
}
}
最后我在启动应用程序的主 class 中有一个 @EnableBinding(HelloBinding.class)。
要使用 rabbitmq 活页夹实现设置 spring 云流,您需要在 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>
然后你在你的应用程序中定义它。properties/yaml
2.
spring:
cloud:
stream:
bindings:
greetingChannel
destination: test.greeting
group: queue
rabbit:
bindings:
greetingChannel:
producer:
transacted: true //optional
EnableBinding(HelloBinding.class)
- 注入绑定并使用它
helloBinding.greeting().send(MessageBuilder
.withPayload(...)
.build());
- rabbitMQ 属性的设置
有一个简单的 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();
}
ProducerController
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);
}
}
最后我在启动应用程序的主 class 中有一个 @EnableBinding(HelloBinding.class)。
要使用 rabbitmq 活页夹实现设置 spring 云流,您需要在 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>
然后你在你的应用程序中定义它。properties/yaml
2.
spring:
cloud:
stream:
bindings:
greetingChannel
destination: test.greeting
group: queue
rabbit:
bindings:
greetingChannel:
producer:
transacted: true //optional
EnableBinding(HelloBinding.class)
- 注入绑定并使用它
helloBinding.greeting().send(MessageBuilder
.withPayload(...)
.build());
- rabbitMQ 属性的设置