本篇文章主要讲述了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(); } } }