`

java springboot集成rabbitMQ之对象传输

阅读更多

了解springcloud架构可以加求求:三五三六二四七二五九

 rabbitMQ的安装方法网上有很多教程,这里就不重复了。

在springboot上使用rabbitMQ传输字符串和对象,本文所给出的例子是在两个不同的项目之间进行对象和和字符串的传输。
rabbitMQ的依赖(在两个项目中一样的配置):

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

 pom配置文件(在两个项目中一样的配置):

字符转的相互传输(本例使用的topic类型)

1>. 首先,在生产者(项目A)中写配置文件,其中生成队列queue,交换机exchange并且进行绑定binding

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author:fdh
 * @Description:
 * @Date: Create in 16:13 2017/12/22
 */
@Configuration
public class senderConfigration {
    /**
    *@Description: 新建队列 topic.messages
    *@Data:16:14 2017/12/22
    */
   @Bean(name = "messages")
    public Queue queueMessages(){
        return new Queue("topic.messages");
    }
    /**
    *@Description: 定义交换器
    *@Data:16:15 2017/12/22
    */
    @Bean
    public TopicExchange exchange(){
        return new TopicExchange("exchange");
    }
    /**
    *@Description: 交换机与消息队列进行绑定 队列messages绑定交换机with topic.messages
    *@Data:16:18 2017/12/22
    */
    @Bean
    Binding bindingExchangeMessages(@Qualifier("messages") Queue queueMessages,TopicExchange exchange){
        return BindingBuilder.bind(queueMessages).to(exchange).with("topic.messages");
    }
}

 2>. 第二步(项目A),生产者把消息发送到消息队列,

/**
 * @Author:fdh
 * @Description:
 * @Date: Create in 14:15 2017/12/22
 */
@Controller
public class RabbitController  {
    @Autowired
    private AmqpTemplate amqpTemplate;
    @RequestMapping("/sendss")
    public void send1(){
        amqpTemplate.convertAndSend("exchange","topic.messages","hello topic.messages RabbitMQ");
    }
}

 3>. 接下来,在消费者(项目B)端写一个监听器,交换器会根据绑定的routing key(topic.messages)把生产者生产的消息放到匹配的消息队列中,监听器会监听相应的消息队列来获取路由到该消息队列上的消息。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
/**
 * @ Author:fdh
 * @ Description: 消息队列监听器
 * @ Date: Create in 14:19 2017/12/22
 */
@Component
public class Receiver {
 @RabbitListener(queues = "topic.messages")
    public void process2(String str1) throws ClassNotFoundException{
        System.out.println("messages :"+str1);
        System.out.println(Thread.currentThread().getName()+"接收到来自topic.message队列的消息: "+str1); 
    }

 这样,一个简单的字符串的传输便写好了,下面打开刚才定义的mapping: 192.168.1.111:8080/sendss

在消费者端的console窗口便会看到打印的消息

 

 

以上就是一个简单的传输字符串的例子了。

2. 下面重点介绍一下消费者和生产者之间对象的传输。

对象的传输,要现在生产者(A)中进行序列化,即把对象转化为字节数组进行传输,在消费者中,再把转化的字节数组反序列化为对象。序列化和反序列化的方法很多,这里采用的是java的Serializable 接口

1>. 在生产者(项目A)和消费者(项目B)的项目中创建实体类。

!注意!:*新建实体类Boy.java 该实体类在项目A、B中的位置,必须一致,即包名必须一致*,在本项目中,Boy.java 在项目A、B中都是: import com.fengdonghao.shiro.bean.Boy;

实体类也要一致。

 

package com.fengdonghao.shiro.bean;

import javax.persistence.*;
import java.io.Serializable;
/**
 * @Author:fdh
 * @Description:
 * @Date:Create in11:14 2017/12/16
 */
@Entity
public class Boy implements Serializable{
    private static final long serialVersionUID=1L;
    @Id
    @GeneratedValue
    private int id;
    private String name;
    private int age;
    @Override
    public String toString() {
        return "Boy{" +
                "age=" + age +
                ", id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
//此处省略getter 和setter 方法
}

 2>. 在生产者(A)中配置 消息队列,交换器,并进行绑定binding,和在 例子1中的第一步是一样的

3>. 在生产者(A)中的RabbitController.java 中另写一个mapping,如下

@Controller
public class RabbitController {
    @Autowired
    private AmqpTemplate amqpTemplate;
    @ResponseBody
    @RequestMapping("/send")
    public void send1() throws Exception{
        Boy boy=new Boy(15,"tom");
        //对象转化为字节码 把对象转化为字节码后,把字节码传输过去再转化为对象
        byte[] bytes=getBytesFromObject(boy);
        System.out.println(bytes);
        amqpTemplate.convertAndSend("exchange","topic.messages",bytes);
    }
    //对象转化为字节码
    public  byte[] getBytesFromObject(Serializable obj) throws Exception {
        if (obj == null) {
            return null;
        }
        ByteArrayOutputStream bo = new ByteArrayOutputStream();
        ObjectOutputStream oo = new ObjectOutputStream(bo);
        oo.writeObject(obj);
        return bo.toByteArray();
    }

}

 4>. 在消费者(B)中对字节数组进行反序列化。

在Receiver中,重新编写例1重点的监听器

@Component
public class Receiver {
    @RabbitListener(queues = "topic.messages")
    public void process2(byte[] bytes) throws Exception{
        System.out.println(bytes);
        //字节码转化为对象
        Boy boy1=(Boy) getObjectFromBytes(bytes);
        System.out.println(boy1);
        System.out.println("messages :"+boy1.toString());
        System.out.println(Thread.currentThread().getName()+"接收到来自topic.message队列的消息: "+boy1);
    }
    //字节码转化为对象
    public  Object getObjectFromBytes(byte[] objBytes) throws Exception {
        if (objBytes == null || objBytes.length == 0) {
            return null;
        }
        ByteArrayInputStream bi = new ByteArrayInputStream(objBytes);
        ObjectInputStream oi = new ObjectInputStream(bi);
        return oi.readObject();
    }
}

 验证mapping: ip:8080/send

结果如下:
这里写图片描述

 

分享到:
评论

相关推荐

    springboot集成rabbitMQ之对象传输的方法

    Spring Boot 集成 RabbitMQ 之对象传输的方法 本文将详细介绍 Spring Boot 集成 RabbitMQ 之对象传输的方法,从 RabbitMQ 的安装、依赖配置、生产者配置、消费者配置等方面进行讲解,并结合实例代码进行说明。 一...

    springboot+rabbitMQ+websocket

    首先,让我们了解Spring Boot如何集成RabbitMQ。在Spring Boot项目中引入`spring-boot-starter-amqp`依赖,它包含了对RabbitMQ的支持。接着,配置RabbitMQ的相关参数,如主机地址、端口、用户名和密码。在`...

    springboot+rabbitmq+mysql

    标题 "springboot+rabbitmq+mysql" 描述的是一个使用Spring Boot框架集成RabbitMQ消息队列,并将处理后的数据存储到MySQL数据库的简易应用。这个项目可能是一个基础的后台服务,用于处理异步任务或者数据同步。接...

    SpringBoot集成Rabbitmq简单案例

    Spring Boot是Spring框架的轻量级实现,旨在简化Java应用的开发过程,而RabbitMQ则是一个广泛使用的开源消息代理,它遵循AMQP(Advanced Message Queuing Protocol)协议,用于在分布式系统中高效地传输消息。...

    springboot+rabbitmq

    RabbitMQ是基于AMQP(Advanced Message Queuing Protocol)协议的消息中间件,用于在分布式系统中可靠地传输消息。它允许应用程序之间异步通信,提高了系统的响应速度和可伸缩性。RabbitMQ支持多种编程语言,包括...

    springboot-rabbitMQ-websocket:springboot整合rabbitMQ和websocket,实现消息的发布和接收,并通过websocket实时推送数据到页面

    这个项目的实际应用可能包括实时通知、流媒体传输、股票市场数据更新等场景,它展示了Java后端如何通过RabbitMQ进行异步处理,同时利用WebSocket实现高效的数据推送,为用户提供无缝的实时体验。 总之,Spring Boot...

    springboot-rabbitmq

    1. **Spring Boot集成RabbitMQ**:通过添加`spring-boot-starter-amqp`依赖,Spring Boot可以与RabbitMQ无缝集成。在配置文件(`application.properties`或`application.yml`)中,我们需要配置RabbitMQ服务器的相关...

    springboot集成rabbitMQ

    ### Spring Boot 集成 RabbitMQ 实战指南 #### 一、准备工作 为了实现 Spring Boot 与 RabbitMQ 的集成,我们需要完成以下准备工作: 1. **确保 RabbitMQ 服务正常运行**: - 安装 RabbitMQ 服务器。如果你还...

    springboot与rabbitmq结合的实战、实例项目

    - **创建消息模型**: 设计数据模型,通常是一个Java类,表示你要传输的数据。 - **定义交换机和队列**: 交换机决定了消息如何路由,队列是消息的容器。可以使用`@RabbitExchange`和`@RabbitQueue`注解来定义它们。...

    springboot-集成MQ

    集成RabbitMQ到Spring Boot工程中,我们需要以下几个步骤: 1. **添加依赖**:在`pom.xml`文件中,引入Spring Boot的RabbitMQ starter依赖,例如: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;...

    RabbitMq+springboot

    在本文中,我们将深入探讨如何将RabbitMQ与SpringBoot集成,以实现高效的消息队列系统。RabbitMQ是一款开源的消息代理和队列服务器,它使用AMQP(Advanced Message Queuing Protocol)协议,广泛应用于分布式系统中...

    RabbitMQ.pdf

    在本文中,我们将深入探讨消息队列的概念,RabbitMQ的特性,以及如何在SpringBoot中集成RabbitMQ。 **1. 消息队列概述** 消息队列(MQ)是一种通信机制,它允许应用程序之间通过队列传输数据,而不是直接调用彼此...

    rabbitmq.7z

    2. **SpringBoot集成RabbitMQ** - **配置**:在SpringBoot应用中,我们需要配置RabbitMQ的相关参数,如服务器地址、端口、虚拟主机、用户名和密码。 - **RabbitTemplate**:这是Spring提供的模板类,用于发送和...

    Java-SpringBoot的分布式架构网上购物商城系统毕业设计源码(源代码+论文)

    在分布式架构中,SpringBoot可以整合各种微服务组件,如服务注册与发现(Eureka、Consul等)、负载均衡(Ribbon、Feign)、熔断机制(Hystrix)以及消息队列(RabbitMQ、Kafka)等,构建出高可用、可扩展的系统。...

    基于Java Springboot+Vue的健身房管理系统设计与实现文档.docx

    ### 基于Java Springboot+Vue的健身房管理系统设计与实现文档 #### 一、引言 随着现代人对健康的日益重视以及信息技术的发展,健身房管理信息系统作为一种新兴的健康管理工具,正逐渐成为人们健身过程中的重要助手...

    rabbitMq消息接收与消费

    在SpringBoot中集成RabbitMQ,我们需要以下步骤: 1. **依赖添加**:在`pom.xml`文件中引入Spring Boot的RabbitMQ Starter依赖,例如: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-...

    spring boot集成rabbitmq的实例教程

    【Spring Boot集成RabbitMQ】 在Spring Boot应用中集成RabbitMQ,可以让我们的系统实现高效、异步的消息通信。RabbitMQ是一个开源的消息代理,它作为消息中间件,允许不同服务之间通过消息进行通信,提高了系统的...

    RabbitMQ整合SpringBoot综合应用

    通过集成RabbitMQ,SpringBoot可以帮助开发者快速构建支持消息队列的系统。 整合RabbitMQ与SpringBoot的步骤如下: 1. **依赖添加**:在`pom.xml`文件中,添加RabbitMQ的Spring Boot Starter依赖,这样SpringBoot...

    Java项目之springboot家政服务管理平台(源码 + 说明文档)

    本项目——"Java项目之SpringBoot家政服务管理平台",旨在利用SpringBoot的强大功能,构建一个高效、易维护的家政服务管理系统,提供全面的家政服务流程管理,包括预约、派单、服务评价等功能。通过源码和说明文档,...

    RabbitMQ与SpringBoot整合.docx

    ### RabbitMQ与SpringBoot整合详解 #### 一、RabbitMQ简介 RabbitMQ作为一款高效、可靠的消息中间件,在分布式系统中扮演着至关重要的角色。消息中间件是一类基础软件,其主要职责是在分布式系统中实现消息的发送...

Global site tag (gtag.js) - Google Analytics