这里使用最简单的方式 Spring Cloud Stream去整合MQ
- 导入依赖(这里依赖要注意,如果报错更换低版本试试)
如果是其他的MQ将rabbit更换成其他的即可,但是版本号需要自己去拉取
<!--spring-cloud-starter-stream-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
<version>3.0.13.RELEASE</version>
</dependency>
- 添加连接配置
rabbitmq:
host: ${RABBIT_HOST:127.0.0.1}
port: ${RABBIT_PORT:5672}
username: ${RABBIT_HOST:eladmin}
password: ${RABBIT_HOST:eladmin}
#虚拟host 可以不设置,使用server默认host
virtual-host: ${RABBIT_virtual_HOST:eladmin}
- 绑定broker 注意生产者跟消费者的destination 必须一致:
# rabbit配置
cloud:
stream:
bindings:
userOutPut:
destination: user_message
userInPut:
destination: user_message
# group: userMassageConstomer
#其他的配置可以参考 BindingServiceProperties类
- 创建provider
public interface UserMessageSource {
String USER_IN_PUT = "userInPut";
String USER_OUT_PUT = "userOutPut";
@Output(USER_OUT_PUT)
MessageChannel userOutPut();
@Input(USER_IN_PUT)
SubscribableChannel userInPut();
}
- 创建生产者
@EnableBinding(UserMessageSource.class)
public class UserMessageProducer {
private final UserMessageSource channel;
public UserMessageProducer(UserMessageSource channel) {
this.channel = channel;
}
public void publish(User user){
channel.userOutPut().send(MessageBuilder.withPayload(user).build());
}
}
- 创建消费者
@Slf4j
@EnableBinding(UserMessageSource.class)
public class UserMessageConsumer {
@StreamListener(UserMessageSource.USER_IN_PUT)
public void consumer(@Payload User user){
log.info("收到消息:{}",user);
}
}