介绍 Java RabbitMQ Client

介绍 Java RabbitMQ Client

解耦组件是软件设计的重要部分,其中一种实现是使用消息系统。其提供异步方式实现组件或服务间通信。本文我们介绍其中一个消息系统实现:RabbitMQ。

RabbitMQ是实现Advanced Message Queuing Protocol (AMQP)协议的消息代理中间件,对主流语言都提供了客户端库。

除了对软件组件进行解耦,还可以用于下列场景:

  • 执行后端操作
  • 执行异步操作
  • 在网络仅允许单向访问时,使用可以避免繁琐的轮询方式。

1. 消息模型

首先我们从高层看下消息是如何工作的。简言之,有两类应用于消息系统进行交互:生产者和消费者。生产者给代理发送(发布)消息,消费者从代理接收消息。通常这些软件组件运行在不同的主机上,RabbitMQ作为它们之间通信中间件。

本文我们讨论一个简单示例,两个组件使用RabbitMQ进行通信,其中一个服务负责发布消息至RabbitMQ,另一个负责消费。

2. 示例实现

2.1. 环境准备

开始之前需要先运行RabbitMQ,读者可以参考官方指南

当然我们需要使用Java客户端与RabbitMQ服务端进行交互,Maven依赖如下:

<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>4.0.0</version>
</dependency>

RabbitMQ服务器运行之后,我们需要使用java客户端进行连接:

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();

ConnectionFactory 设置和消息服务器的连接,同时负责协议(AMQP)和认证。示例代码连接到localhost,我们可以使用setHost函数设置主机。

也可以使用setPort方法设置RabbitMQ服务器的端口号,默认为15672.

factory.setPort(15678);

当然也可以设置用户名和密码:

factory.setUsername("user1");
factory.setPassword("MyPassword");

下面使用该连接发布和消费消息。

2.2. 生产者

讨论简单场景,web应用允许用户给网站增加新的产品,当有新产品增加时,需要给客户发送邮件。首先我们定义队列:

channel.queueDeclare("products_queue", false, false, false, null);

每当用户增加新的产品时,我们给队列发布消息:

String message = "product details"; 
channel.basicPublish("", "products_queue", null, message.getBytes());

最后我们关闭通道和连接。发送的消息将被另一个服务消费,其负责发送邮件给客户。

2.3. 消费者

下面看如何实现消费端代码,首先声明相同的队列:

channel.queueDeclare("products_queue", false, false, false, null);

下面代码定义消费者采用异步方式处理消息:

Consumer consumer = new DefaultConsumer(channel) {
    @Override
     public void handleDelivery(
        String consumerTag,
        Envelope envelope, 
        AMQP.BasicProperties properties, 
        byte[] body) throws IOException {
  
            String message = new String(body, "UTF-8");
            // process the message
     }
};
channel.basicConsume("products_queue", true, consumer);

3. 总结

本文简要讨论了RabbitMQ的基本概念,并通过简单示例说明如何实现生产者和消费者程序。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值