关于Java整合RabbitMQ实现生产消费的7种通讯方式

关于Java整合RabbitMQ实现生产消费的7种通讯方式,以下是详细的攻略。

1. 概述

RabbitMQ是一个流行的开源消息中间件,被广泛用于构建可靠、可扩展和高性能的分布式系统,而Java作为一种流行的编程语言,也提供了丰富的集成库来实现与RabbitMQ的通讯。Java整合RabbitMQ实现生产消费主要有以下7种通讯方式:

  1. 原生AMQP协议
  2. Spring-AMQP框架
  3. Spring Boot集成
  4. Spring Cloud Stream框架
  5. Spring Integration框架
  6. RabbitMQ-client框架
  7. Spring Batch框架

下面对这7种通讯方式进行详细的介绍。

2. 原生AMQP协议

使用原生AMQP协议需要使用官方提供的RabbitMQ Java客户端库,通过手动创建连接、信道、队列和交换机等元素,然后编写消息生产者和消费者代码。

以下是一个简单的示例代码,用于消息的发送和接收:

import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.QueueingConsumer;

public class NativeAMQPExample {

    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        //创建一个队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        String message = "Hello World!";
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
        System.out.println(" [x] Sent '" + message + "'");

        //创建一个消费者
        QueueingConsumer consumer = new QueueingConsumer(channel);
        channel.basicConsume(QUEUE_NAME, true, consumer);

        //接收消息并处理
        while (true) {
            QueueingConsumer.Delivery delivery = consumer.nextDelivery();
            String messageReceived = new String(delivery.getBody());
            System.out.println(" [x] Received '" + messageReceived + "'");
        }
    }
}

3. Spring-AMQP框架

Spring-AMQP框架是对原生AMQP协议的封装,提供了一系列简化操作的模板类和回调接口,以及一些注解和配置项。使用该框架可以更加便捷地实现与RabbitMQ的通讯。

以下是一个使用Spring-AMQP框架进行消息发送和接收的示例代码:

import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringAMQPExample {

    @Bean
    public Queue helloQueue() {
        return new Queue("hello");
    }

    @Bean
    public RabbitTemplate rabbitTemplate() {
        RabbitTemplate template = new RabbitTemplate();
        template.setConnectionFactory(connectionFactory());
        return template;
    }

    @RabbitListener(queues = "hello")
    public void receiveMessage(String message) {
        System.out.println("Received message: " + message);
    }

    public void sendMessage(String message) {
        rabbitTemplate().convertAndSend("hello", message);
    }

}

4. Spring Boot集成

Spring Boot集成了Spring-AMQP框架和RabbitMQ Java客户端库,并提供了一些自动配置项和便捷的操作。在Spring Boot应用中使用RabbitMQ,只需要添加相应的依赖,然后在配置文件中设置RabbitMQ的连接信息即可。

以下是一个简单的使用Spring Boot集成RabbitMQ的示例代码:

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class SpringBootExample {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public static void main(String[] args) {
        ConfigurableApplicationContext context =
                SpringApplication.run(SpringBootExample.class, args);
        SpringBootExample example = context.getBean(SpringBootExample.class);
        example.sendMessage("Hello World!");
    }

    public void sendMessage(String message) {
        rabbitTemplate.convertAndSend("hello", message);
    }

}

5. Spring Cloud Stream框架

Spring Cloud Stream框架是基于Spring Boot和Spring Integration的事件驱动微服务框架,提供了一系列事件驱动的编程模型和API,包括事件发布、订阅、路由和转换等。

以下是一个示例代码,使用Spring Cloud Stream框架实现消息发送和接收:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.messaging.support.MessageBuilder;

@SpringBootApplication
@EnableBinding(Source.class)
public class SpringCloudStreamExample {

    private final Source source;

    public SpringCloudStreamExample(Source source) {
        this.source = source;
    }

    public void sendMessage(String message) {
        source.output().send(MessageBuilder.withPayload(message).build());
    }

    @StreamListener(Source.OUTPUT)
    public void receiveMessage(@Payload String message) {
        System.out.println("Received message: " + message);
    }

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(SpringCloudStreamExample.class);
        app.setWebEnvironment(false);
        app.run(args);
    }
}

6. Spring Integration框架

Spring Integration框架是Spring提供的一个企业级集成解决方案,用于构建复杂的系统和流程。它提供了一系列内置的消息模块和组件,包括消息通道、转换器、路由器、过滤器等,以及对RabbitMQ的集成支持。

以下是一个使用Spring Integration框架进行消息发送和接收的示例代码:

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.amqp.dsl.Amqp;
import org.springframework.integration.annotation.MessagingGateway;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.config.EnableIntegration;
import org.springframework.messaging.MessageChannel;

@Configuration
@EnableIntegration
public class SpringIntegrationExample {

    @Bean
    public RabbitTemplate rabbitTemplate() {
        RabbitTemplate template = new RabbitTemplate();
        template.setConnectionFactory(connectionFactory());
        return template;
    }

    @Bean
    public MessageChannel inputChannel() {
        return new DirectChannel();
    }

    @Bean
    public MessageChannel outputChannel() {
        return new DirectChannel();
    }

    @Bean
    public Amqp.InboundChannelAdapter inbound() {
        return Amqp.inboundAdapter(rabbitTemplate())
                .autoStartup(true)
                .messageConverter(messageConverter())
                .queueName("hello")
                .pubSub(false)
                .outputChannel(inputChannel())
                .get();
    }

    @Bean
    public Amqp.OutboundGateway outboundGateway() {
        return Amqp.outboundGateway(rabbitTemplate())
                .exchangeName("")
                .routingKey("hello")
                .replyTimeout(10000)
                .messageConverter(messageConverter())
                .outputChannel(outputChannel())
                .requestChannel(inputChannel())
                .get();
    }

    @MessagingGateway(defaultRequestChannel = "inputChannel", defaultReplyChannel = "outputChannel")
    public interface RabbitGateway {

        String sendAndReceive(String message);

    }

    private MessageConverter messageConverter() {
        return new org.springframework.amqp.support.converter.SimpleMessageConverter();
    }

}

7. RabbitMQ-client框架

RabbitMQ-client框架是RabbitMQ官方提供的Java客户端库,提供了一系列API,用于实现消息发送和接收。与原生AMQP协议相比,使用RabbitMQ-client框架更加便捷和简洁。

以下是一个使用RabbitMQ-client框架进行消息发送和接收的示例代码:

import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;

public class RabbitMQClientExample {

    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        channel.queueDeclare(QUEUE_NAME, false, false, false, null);

        //发送消息
        String message = "Hello World!";
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
        System.out.println(" [x] Sent '" + message + "'");

        //接收消息
        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String messageReceived = new String(delivery.getBody(), "UTF-8");
            System.out.println(" [x] Received '" + messageReceived + "'");
        };
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
    }
}

以上是7个关于Java整合RabbitMQ实现生产消费的通讯方式,满足不同场景的需求,开发者可以根据自己的实际需求进行选择配合。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于Java整合RabbitMQ实现生产消费的7种通讯方式 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • MongoDB安装到windows服务的方法及遇到问题的完美解决方案

    下面是详细的MongoDB安装到Windows服务的方法以及遇到问题的完美解决方案: 1. 环境准备 首先需要在Windows系统中安装MongoDB,具体安装步骤可参考MongoDB官方网站的安装指南。安装完成后需要配置环境变量,将MongoDB的bin目录路径添加至系统Path中。 2. 安装MongoDB服务 在命令提示符中以管理员权限运行,进入Mon…

    人工智能概览 2023年5月25日
    00
  • vue+socket.io+express+mongodb 实现简易多房间在线群聊示例

    下面我将详细讲解“vue+socket.io+express+mongodb 实现简易多房间在线群聊示例”的完整攻略,具体步骤如下: 1. 环境准备 在开始编程之前,需要先准备好必要的环境,包括: Node.js及npm包管理器 MongoDB数据库 Vue.js框架 在确认这些工具已经就绪后,接下来可以开始进行实现了。 2. 服务端实现 本示例中,我们选用…

    人工智能概论 2023年5月25日
    00
  • Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)

    我来为你详细讲解 “Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)”。 1. 安装Eclipse 在Windows系统下,我们可以从 Eclipse 官网上下载并安装 Eclipse IDE for Java Developers. 安装过程中我们可以选择默认位置进行安装。安装结束后,我们打开Eclipse,并在工作区(Wor…

    人工智能概览 2023年5月25日
    00
  • 在Mac OS下搭建LNMP开发环境的步骤详解

    在Mac OS下搭建LNMP开发环境的步骤详解 简介 LNMP(Linux + Nginx + MySQL + PHP)是一种网站开发和运行环境,与传统的LAMP(Linux + Apache + MySQL + PHP)相比,LNMP具有更高的性能和更低的资源消耗,是目前非常流行的web开发环境之一。本文将详细介绍如何在Mac OS上搭建LNMP开发环境。…

    人工智能概览 2023年5月25日
    00
  • Python列表的切片取值详解

    Python列表的切片取值是列表操作中的重要部分,通过切片操作可以方便的截取列表中的元素。下面是针对Python列表的切片取值的详细攻略。 什么是切片取值? 切片取值是通过指定切片范围,在列表中截取需要的元素的操作。切片操作的结果又是一个新列表,并不会改变原来的列表。 切片的语法 切片操作使用的语法格式为:list[start:end:step],其中: s…

    人工智能概论 2023年5月25日
    00
  • 浅谈服务发现和负载均衡的来龙去脉

    浅谈服务发现和负载均衡的来龙去脉 什么是服务发现 服务发现是指客户端应用程序通过查询服务发现系统或者中心组件来获取可用服务实例的列表的过程。服务发现对于微服务架构非常关键,因为在微服务中服务实例的数量很多,且容易变化。服务发现的常见实现方式有两种:客户端发现和服务端发现。 客户端发现 客户端发现是指客户端应用程序负责发现可用服务实例并从中选择一个来进行请求的…

    人工智能概览 2023年5月25日
    00
  • Python通过Django实现用户注册和邮箱验证功能代码

    下面我将为您详细讲解“Python通过Django实现用户注册和邮箱验证功能代码”的完整攻略。 1. 环境搭建 在使用Django开发之前,需要先安装Python和Django。可以通过以下步骤来安装: 安装Python 对于Windows系统,可以在Python官网(https://www.python.org/downloads/)中下载安装包进行安装。…

    人工智能概论 2023年5月24日
    00
  • windows7配置Nginx+php+mysql的详细教程

    下面是详细的“windows7配置Nginx+php+mysql”的攻略。 准备工作 1. 下载软件 Nginx:下载nginx-1.19.1.zip版本。 PHP:下载VC15 x64 Thread Safe版本。 MySQL:下载mysql-installer-community-5.7.31.0.msi版本。 2. 安装软件 将下载好的软件安装到系统中…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部