当然了,看上一篇文章,RabbitMQ需要引入包和配置
<!--RabbitMQ-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
//在spring下添加RabbitMQ的配置
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
然后引入Stream的包
<!--spirng cloud Stream-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
接下来,就是代码
第一步,新建一个接口StreamClient
public interface StreamClient {
String INPUT = "sendMessage";
@Input(StreamClient.INPUT)
SubscribableChannel input();
@Output(StreamClient.INPUT)
SubscribableChannel output();
}
第二步,消息接收类StreamReceiver
@Component
@EnableBinding(StreamClient.class)
@Slf4j
public class StreamReceiver {
/**
* 接收对象
* @param obj
*/
@StreamListener(StreamClient.INPUT)
public String process(OrderDTO obj){
log.info("StreamReceiver:{}",obj);
return "消息处理完毕";
}
}
第三步,消息的发送方
@RestController
public class SendMessageController {
@Autowired
private StreamClient streamClient;
/**
* 发送对象
*/
@GetMapping("/sendMessage")
public void process(){
OrderDTO orderDTO = new OrderDTO();
orderDTO.setOrderId("123456");
streamClient.output().send(MessageBuilder.withPayload(orderDTO).build());
}
}
注意:
1.如果项目需要部署多个,但是消息的接收者,所有项目只需要一个就行,那么需要在配置文件中,spring.cloud下加上
stream:
bindings:
myMessage:
group: order
content-type: application/json
2.当消息接收者处理完毕还需要通知其他对象,那么在消息接收者StreamReceiver类中需要处理一下
/**
* 接收对象
* @param obj
*/
@StreamListener(StreamClient.INPUT)
@SendTo(StreamClient.INPUT2)//消息处理完毕,再发送消息通知
public String process(OrderDTO obj){
log.info("StreamReceiver:{}",obj);
return "消息处理完毕";
}
/**
* 接收对象
* @param obj
*/
@StreamListener(StreamClient.INPUT2)
public void process2(String obj){
log.info("StreamReceiver2:{}",obj);
}
同样的在接口StreamClient中定义新的队列
public interface StreamClient {
String INPUT = "sendMessage";
String INPUT2 = "sendMessage2";
@Input(StreamClient.INPUT)
SubscribableChannel input();
@Output(StreamClient.INPUT)
SubscribableChannel output();
@Input(StreamClient.INPUT2)
SubscribableChannel input2();
@Output(StreamClient.INPUT2)
SubscribableChannel output2();
}