Spring Cloud Stream 整合RabbitMQ

pom.xml中引入如下依赖内容,其中spring-boot-starter-amqp用于支持RabbitMQ

        <!--mq-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
        </dependency>

消息接收端

application.properties配置

#MQ
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
#定义通道mqScoreInput,只会有一台机器接收到消息
spring.cloud.stream.bindings.mqScoreInput.group=queueName
spring.cloud.stream.bindings.mqScoreInput.destination=exchangeName
#消息转换
spring.cloud.stream.bindings.mqScoreInput.contentType=application/json

定义接口

/**
 * 定义接口
 * @author 向振华
 * @date 2018/11/14 13:54
 */
public interface ReceiverChannel {

    String SCORE_INPUT = "mqScoreInput";

    @Input(ReceiverChannel.SCORE_INPUT)
    SubscribableChannel scoreInput();
}

接收消息(进行绑定) 

/**
 * 进行绑定
 * @author 向振华
 * @date 2018/11/14 13:55
 */
@Component
@EnableBinding({ReceiverChannel.class})
public class ReceiverServer {

    @StreamListener(ReceiverChannel.SCORE_INPUT)
    public void receive(Object o) {
        //如果需要接受指定实体类,这里Object换成实体对象
        System.out.println("receive接收消息:"+o);
    }

//    /*转发*/
//    @SendTo(/*其他通道*/)
//    @StreamListener(/*接受通道*/)
//    public String sendTo(Object o) {
//        return "sendTo";
//    }

}

消息发送端

application.properties配置

#MQ
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
#定义通道mqScoreOutput
spring.cloud.stream.bindings.mqScoreOutput.destination=exchangeName
#消息转换
spring.cloud.stream.bindings.mqScoreOutput.contentType=application/json

定义接口

/**
 * 定义接口
 * @author 向振华
 * @date 2018/11/14 13:51
 */
public interface SendChannel {

    String SCORE_OUTPUT = "mqScoreOutput";

    @Output(SendChannel.SCORE_OUTPUT)
    MessageChannel scoreOutput();
}

进行绑定

/**
 * 进行绑定
 * @author 向振华
 * @date 2018/11/14 13:52
 */
@EnableBinding(SendChannel.class)
public class SendServerConfig {
}

消息发送者

/**
 * 注入可以发送消息的bean
 * @author 向振华
 * @date 2018/11/14 13:52
 */
@Service
public class SendServer {

    @Autowired
    private SendChannel sendChannel;

    @Autowired
    @Qualifier("mqScoreOutput")
    private MessageChannel messageChannel;

    public boolean sendMsg(String msg) {
        Message<String> message = MessageBuilder.withPayload(msg).build();
        return sendChannel.scoreOutput().send(message);
    }

    public boolean sendMsg2(String msg) {
        Message<String> message = MessageBuilder.withPayload(msg).build();
        return messageChannel.send(message);
    }

    public boolean sendList(String msg){
        List<String> m = Lists.newArrayList(msg+1, msg+2, msg+3);
        Message<List<String>> message = MessageBuilder.withPayload(m).build();
        return sendChannel.scoreOutput().send(message);
    }

}

测试

/**
 * @author 向振华
 * @date 2018/11/14 13:57
 */
@RequestMapping("/test")
@RestController
public class TestController {

    @Autowired
    private SendServer sendServer;

    @GetMapping("/sendMsg")
    @ResponseBody
    public Boolean sendMsg(String msg){
        return sendServer.sendMsg(msg);
    }

    @GetMapping("/sendList")
    @ResponseBody
    public Boolean sendList(String msg){
        return sendServer.sendList(msg);
    }
}

 

 

 

项目地址:https://github.com/xxiangzh

需要先在本地安装rabbitmq

 

1:安装RabbitMQ需要先安装Erlang语言开发包,直接下载地址:http://erlang.org/download/otp_win64_18.3.exe

2:安装RabbitMQ Server 直接下载地址:http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-3.6.9.exe

 

3:以管理员身份运行cmd.exe,进入目录 D:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.9\sbin(RabbitMQ Server安装目录),运行cmd命令:rabbitmq-plugins.bat enable rabbitmq_management

4:以管理员身份运行cmd.exe,运行命令:net stop RabbitMQ && net start RabbitMQ。启动RabbitMQ Server

在浏览器输入地址:http://localhost:15672,输入默认账号:guest  密码:guest。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值