RabbitMQ - 快速入门(二)

简介: RabbitMQ - 快速入门(二)

使用stream发送和接收消息


1. 引入依赖 spring-cloud-starter-stream-rabbit


2. 配置 rabbitMq


3. 新建接口 StreamClient,分别定义 input() 和 output()


4. 接收端


5. 发送端


image.png

Order

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
package com.imooc.order.message;
import org.springframework.cloud.stream.annotation.Input;
import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.SubscribableChannel;
public interface StreamClient {
    String INPUT = "myMessage";
    String INPUT2 = "myMessage2";
    @Input(StreamClient.INPUT)
    SubscribableChannel input();
    @Output(StreamClient.INPUT)
    MessageChannel output();
    @Input(StreamClient.INPUT2)
    SubscribableChannel input2();
    @Output(StreamClient.INPUT2)
    MessageChannel output2();
}
package com.imooc.order.controller;
import com.imooc.order.dto.OrderDTO;
import com.imooc.order.message.StreamClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@RestController
public class SendMessageController {
    @Autowired
    private StreamClient streamClient;
//    @GetMapping("/sendMessage")
//    public void process() {
//        String message = "now " + new Date();
//        streamClient.output().send(MessageBuilder.withPayload(message).build());
//    }
    /**
     * 发送 orderDTO对象
     */
    @GetMapping("/sendMessage")
    public void process() {
        OrderDTO orderDTO = new OrderDTO();
        orderDTO.setOrderId("123456");
        streamClient.output().send(MessageBuilder.withPayload(orderDTO).build());
    }
}
package com.imooc.order.message;
import com.imooc.order.dto.OrderDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component;
@Component
@EnableBinding(StreamClient.class)
@Slf4j
public class StreamReceiver {
//    @StreamListener(value = StreamClient.INPUT)
//    public void process(Object message) {
//        log.info("StreamReceiver: {}", message);
//    }
    /**
     * 接收orderDTO对象 消息
     * @param message
     */
    @StreamListener(value = StreamClient.INPUT)
    @SendTo(StreamClient.INPUT2) // 接收消息后,回复消息,或间接转发消息
    public String process(OrderDTO message) {
        log.info("StreamReceiver: {}", message);
        return "received.";
    }
    @StreamListener(value = StreamClient.INPUT2)
    public void process2(String message) {
        log.info("StreamReceiver2: {}", message);
    }
}
  • @SendTo(StreamClient.INPUT2):接收消息后,回复消息,或间接转发消息。

启动多个同服务时会有多个实例,如何做到只让一个实例收到消息?

stream有个分组,配置下就好:

spring:
  cloud:
    stream:
      bindings:
        myMessage:
          group: order
          content-type: application/json


  • 支持复杂对象消息,需要配置参数套路: content-type: application/json,效果图对比使用前后,如下图。


image.png


  • 使用前
  • image.png
  • 使用后
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
7月前
|
消息中间件 Java 测试技术
快速入门RabbitMQ并且加入项目实战-kuai-su-ru-men-rabbitmq-bing-qie-jia-ru-xiang-mu-shi-zhan(二)
快速入门RabbitMQ并且加入项目实战-kuai-su-ru-men-rabbitmq-bing-qie-jia-ru-xiang-mu-shi-zhan
136 1
|
7月前
|
消息中间件 运维 Java
RabbitMQ快速入门(简单收发消息)
RabbitMQ快速入门(简单收发消息)
105 0
RabbitMQ快速入门(简单收发消息)
|
7月前
|
消息中间件 存储 Java
RabbitMQ-同步和异步区别&快速入门
RabbitMQ-同步和异步区别&快速入门
216 1
|
7月前
|
消息中间件 Java Docker
快速入门RabbitMQ并且加入项目实战-kuai-su-ru-men-rabbitmq-bing-qie-jia-ru-xiang-mu-shi-zhan(一)
快速入门RabbitMQ并且加入项目实战-kuai-su-ru-men-rabbitmq-bing-qie-jia-ru-xiang-mu-shi-zhan
85 1
|
7月前
|
消息中间件 Java Kafka
【RabbitMQ】RabbitMQ快速入门 通俗易懂 初学者入门
【RabbitMQ】RabbitMQ快速入门 通俗易懂 初学者入门
157 0
|
消息中间件 SQL 负载均衡
RocketMQ快速入门 2
RocketMQ快速入门
208 0
|
消息中间件 Java Apache
RocketMQ快速入门 1
RocketMQ快速入门
198 0
|
消息中间件 Java Spring
RabbitMQ快速入门 3
RabbitMQ快速入门
59 0
|
消息中间件 存储 缓存
RabbitMQ快速入门 2
RabbitMQ快速入门
51 0
|
消息中间件 缓存 Java
RabbitMQ快速入门 1
RabbitMQ快速入门
158 0