本篇文章主要讲述了rabbitMq在spring cloud项目中的使用
-
引入jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
<version>3.0.13.RELEASE</version>
</dependency> -
在rabbitmq操作界面中,创建一个交换机
一、提供者
-
配置文件
server:
port: 8088
spring:
rabbitmq: # 在spring cloud项目中使用的时候,不加这个会报错,不能理解-_-
host: 192.168.0.1 # rabbitmq访问地址
port: 5672 # 端口号
username: rabbitmq # 用户名(不要使用guest)
password: 00000000 # 密码
virtualHost: /
cloud:
stream:
binders: # 需要绑定的rabbitmq的服务信息
defaultRabbit: # 定义的名称,用于bidding整合(可自定义)
type: rabbit # 消息组件类型
environment: # 配置rabbitmq连接环境
spring:
rabbitmq:
host: 192.168.0.1 # rabbitmq 服务器的地址
port: 5672 # rabbitmq 服务器端口
username: rabbitmq # rabbitmq 用户名
password: 00000000 # rabbitmq 密码
virtual-host: / # 虚拟路径
bindings: # 服务的整合处理
testOutput: # 这个是消息通道的名称
destination: exchange-test # exchange名称,交换模式默认是topic;把SpringCloud stream的消息输出通道绑定到RabbitMQ的exchange-saveOrder交换器。
content-type: application/json # 设置消息的类型,本次为json
default-binder: defaultRabbit # 与定义的名称一致
group: saveOrderGroup # 分组 -
编写消息通道接口
# MqMessageSource.java
@Component
public interface MqMessageSource {
# 与配置文件中的消息通道名称一致
String TEST_OUTPUT = "testOutput";
@Output(TEST_OUTPUT)
MessageChannel testOutput();
} -
编写使用类
# MqMessageProducer.java
@EnableBinding(MqMessageSource.class)
public class MqMessageProducer {
@Autowired
@Output(MqMessageSource.TEST_OUTPUT)
private MessageChannel messageChannel;
public void sendMsg(String msg) {
messageChannel.send(MessageBuilder.withPayload(msg).build());
System.err.println("消息发送成功:" + msg);
}
} -
启动项目类,增加@EnableBinding注解
@SpringBootApplication
@EnableBinding(value = {MqMessageSource.class})
public class ProducerApplication {
public static void main(String[] args) {
SpringApplication.run(ProducerApplication.class, args);
}
}
二、消费者
-
配置文件
server:
port: 8087
spring:
rabbitmq:
host: 192.168.0.1
port: 5672
username: rabbitmq
password: 00000000
virtualHost: /
cloud:
stream:
binders:
defaultRabbit:
type: rabbit
environment:
spring:
rabbitmq:
host: 192.168.0.1
port: 5672
username: rabbitmq
password: 00000000
virtual-host: /
bindings:
testInput: # 与提供者唯一区别的地方
destination: exchange-test
content-type: application/json
default-binder: defaultRabbit
group: saveOrderGroup -
编写消息通道接口
# MqMessageSource.java
@Component
public interface MqMessageSource {
# 与配置文件中的消息通道名称一致
String TEST_INPUT = "testInput";
@Input(TEST_INPUT)
MessageChannel testInput();
} -
编写使用类
# MqMessageProducer.java
@EnableBinding(MqMessageSource.class)
public class MqMessageProducer {
@Autowired
@Output(MqMessageSource.TEST_OUTPUT)
private MessageChannel messageChannel;
public void sendMsg(String msg) {
messageChannel.send(MessageBuilder.withPayload(msg).build());
System.err.println("消息发送成功:" + msg);
}
} -
启动项目类,增加@EnableBinding注解
@SpringBootApplication
@EnableBinding(value = MqMessageSource.class)
public class ConsumerApplication {
public static void main(String[] args) {
try {
SpringApplication.run(ConsumerApplication.class, args);
} catch (Exception e) {
e.printStackTrace();
}
}
}