交互模型如图所示:
Provider端中模块8801通过消息管道向rabbitmq发送消息步骤
- 创建8801模块
- 导包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
- 写配置
server:
port: 8801
spring:
application:
name: cloud-stream-provider
cloud:
stream:
binders: # 在此处配置要绑定的rabbitmq的服务信息;
defaultRabbit: # 表示定义的名称,用于于binding整合
type: rabbit # 消息组件类型
environment: # 设置rabbitmq的相关的环境配置
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
bindings: # 服务的整合处理
output: # 这个名字是一个通道的名称
destination: studyExchange # 表示要使用的Exchange名称定义
content-type: application/json # 设置消息类型,本次为json,文本则设置“text/plain”
binder: defaultRabbit # 设置要绑定的消息服务的具体设置
eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://localhost:7001/eureka
instance:
lease-renewal-interval-in-seconds: 2 # 设置心跳的时间间隔(默认是30秒)
lease-expiration-duration-in-seconds: 5 # 如果现在超过了5秒的间隔(默认是90秒)
instance-id: send-8801.com # 在信息列表时显示主机名称
prefer-ip-address: true # 访问的路径变为IP地址
说明:这里的destination
名称即为rabbitmq中交换机的名称,如果消息发送成功,rabbitmq中会新增一个名为studyExchange
的交换机。
- 主程序类
@SpringBootApplication
public class StreamMQMain8801 {
public static void main(String[] args) {
SpringApplication.run(StreamMQMain8801 .class, args);
}
}
- 业务类
(1)创建一个Service接口
public interface IMessageProvider {
public String send();
}
(2)创建接口实现类
@EnableBinding(Source.class)
public class MessageProviderImpl implements IMessageProvider {
@Resource
private MessageChannel output;
@Override
public String send() {
String serial = UUID.randomUUID().toString();
output.send(MessageBuilder.withPayload(serial).build());
System.out.println("********serial:"+serial);
return null;
}
}
说明:
1.添加@EnableBinding(Source.class)
表示与rabbitmq进行绑定。
2.MessageChannel
表示调用消息通道组件,利用消息通道将消息发送到rabbitmq。
(3)创建controller层
@RestController
public class SendMessageController {
@Resource
private IMessageProvider messageProvider;
@RequestMapping(value = "/sendMessage")
public String sendMessage(){
return messageProvider.send();
}
}
- 测试
打开rabbitmq,登录http://localhost:15672/#/
页面,如果Exchange
中有studyExchange
说明通道建立成功。
发送/sendMessage
请求,可以看到rabbitmq中收到了消息。