Spring Boot轻易使用MQ

只要安装了RabbitMQ服务器,并创建了使用消息服务的用户,在Spring Boot中就可以很轻易地使用MQ消息服务。

使用RabbitMQ的原理可用下图简单地描述:

即消息生产者发布消息到RabbitMQ服务器,消息消费者从RabbitMQ中接收消息。

下面使用Spring Boot的体系组件云应用开发工具spring-cloud-stream演示如何轻易地使用MQ消息。

首先创建消息生产者和消息消费者工程或模块,并引用spring-cloud-stream-rabbitmq依赖,如下所示:

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

在消息生产者工程中,编辑主程序,如下所示:

@EnableBinding(Source.class)
@RestController
@SpringBootApplication
public class SenderApplication {
    @Autowired
    @Output(Source.OUTPUT)
    private MessageChannel channel;

    @RequestMapping(method = RequestMethod.POST, path = "/send")
    public void write (@RequestBody Map<String, Object> msg){
        channel.send(MessageBuilder.withPayload(msg).build());
    }

    public static void main(String[] args) {
        SpringApplication.run(SenderApplication.class, args);
    }
}

即使用MessageChannel来发布消息。同时编辑工程配置,如下所示:

server:
  port: 80
spring:
  cloud:
    stream:
      bindings:
        output:
          destination: cloud-stream
  rabbitmq:
    addresses: amqp://192.168.1.211:5672
    username: mqdemo
    password: mq1234

即将服务端口设为80,并设置了stream的目标和连接RabbitMQ的地址和用户。

其次,在消息消费者工程中,编辑主程序,如下所示:

@EnableBinding(Sink.class)
@IntegrationComponentScan
@MessageEndpoint
@SpringBootApplication
public class ReceiverApplication {
    @ServiceActivator(inputChannel=Sink.INPUT)
    public void accept(Map<String, Object> msg){
        System.out.println(msg.get("msg").toString() + ":" + msg.get("name"));
    }

    public static void main(String[] args) {
        SpringApplication.run(ReceiverApplication.class, args);
    }
}

即使用Sink来接收消息。同样也要编辑工程的配置,如下所示:

server:
  port: 81
spring:
  cloud:
    stream:
      bindings:
        input:
          destination: cloud-stream
          group: group1
          consumer:
            durableSubscription: true
  rabbitmq:
    addresses: amqp://192.168.1.211:5672
    username: mqdemo
    password: mq1234

即将服务端口设为81,如果在不同机器上启动工程也可设为80,并配置了RabbitMQ。

现在,就可以使用Post方式在消息生产者中发布消息了。如果你使用过MQ,可能会有疑问,我们还未在MQ服务器中配置通道和队列呢?不过,这个工作已经由stream代劳了,不再需要我们配置。

最后,开始测试,启动两个工程,在MQ服务器中可以看到增加了两个连接,如下所示:

这时,如果在消息生产者中发布消息,在消息消费者中就能收到消息。为了简便起见,我们使用如下指令给消息生产者发送Pose请求,即通过/send发布消息:

curl -l -H "Content-type:application/json" -X POST -d '{"msg":"Hello","name":"RabbitMQ"}' http://localhost/send

注意,上面指令,需在Linux环境中执行。如果请求成功,在消息消费者的控制台日志输出中就可以看到如下消息:

Hello:RabbitMQ

 

转载于:https://my.oschina.net/syic/blog/802863

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值