Java RabbitMQ配置和使用,基于SpringBoot

package rabbitmq.demo;

import com.rabbitmq.client.AMQP;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {

    @Autowired
    RabbitTemplate rabbitTemplate;  //使用RabbitTemplate,这提供了接收/发送等等方法

    @Autowired
    AmqpAdmin amqpAdmin;

    /**
     * 创建交换器 Exchange
     */
    @Test
    public void createExchange() {
        // 创建Exchange 交换器
        amqpAdmin.declareExchange(new DirectExchange("amqpadmin.exchange"));
        System.out.println("创建Exchange完成");
        // 创建Queue 队列,持久化
        amqpAdmin.declareQueue(new Queue("amqpproduct", true));
        System.out.println("创建Queue完成");
        // 创建绑定规则
        amqpAdmin.declareBinding(new Binding("amqpproduct", Binding.DestinationType.QUEUE,
                "amqpadmin.exchange", "amqpproduct", null));
        System.out.println("创建绑定规则完成");
    }

    /**
     * 发送消息给RabbitMQ消息队列 发送单播 点对点的消息  direct方式
     */
    @Test
    public void rabbitMqSendTest() {
        String messageId = String.valueOf(UUID.randomUUID());
        String messageData = "test message, hello!";
        String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        Map<String, Object> map = new HashMap<>();
        map.put("messageId", messageId);
        map.put("messageData", messageData);
        map.put("createTime", createTime);

        //方式一  以默认序列化的方式发送,如用json的方式,写RabbitConfig文件
        rabbitTemplate.convertAndSend("myexchange.direct", "myproduct", map);
    }

    /**
     * 发送消息给RabbitMQ消息队列 广播方式  fanout方式
     */
    @Test
    public void rabbitMqSendTest2() {
        String messageId = String.valueOf(UUID.randomUUID());
        String messageData = "test message, hello!";
        String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        Map<String, Object> map = new HashMap<>();
        map.put("messageId", messageId);
        map.put("messageData", messageData);
        map.put("createTime", createTime);

        //fanout广播方式 不用填路由键 无效
        rabbitTemplate.convertAndSend("myexchange.fanout", "", map);
    }

    /**
     * 从RabbitMQ接收消息
     */
    @Test
    public void rabbitMqGetTest() {
        //收取消息成功后,会从相对应的消息队列里删除该消息
        Object o = rabbitTemplate.receiveAndConvert("myproduct");
        System.out.println("接收的消息队列数据类型:" + o.getClass());
        System.out.println("接收的消息队列数据:" + o.toString());
    }

}
package rabbitmq.demo.config;

import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitConfig {

    /**
     * 用json方式替换默认的序列化
     * @return
     */
    @Bean
    public MessageConverter messageConverter()
    {
        return  new Jackson2JsonMessageConverter();
    }
}
package rabbitmq.demo.service;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;

@Service
public class RabbitListenerService {
    /**
     * 添加监听器,自动获取消息队列信息
     * @param o
     */
    @RabbitListener(queues = {"myproduct","myproduct","myarticle.new"})  //可监听多个queue
    public  void  rabbitMqListenerReceive(Object o){
        // 需要在启动入口添加 @EnableRabbit   开启基于注解的rabbitMQ模式
        System.out.println("接收的消息队列数据类型:" + o.getClass());
        System.out.println("接收的消息队列数据:" + o.toString());
    }
}
#application.yml
server:
  port: 8080
spring:
  #给项目来个名字
  application:
    name: rabbitmq-provider
  #配置rabbitMq 服务器
  rabbitmq:
    host: 139.199.162.126
    port: 5672
    username: xxxx
    password: xxxx
    #虚拟host 可以不设置,使用server默认host
    #virtual-host: JCcccHost
        <!--rabbitmq-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

原文地址:https://www.cnblogs.com/smartsmile/p/11640760.html

时间: 2024-10-14 16:35:00

Java RabbitMQ配置和使用,基于SpringBoot的相关文章

springboot RabbitMQ 配置

引用自 http://www.cnblogs.com/ityouknow/p/6120544.html 自己留一份 记录一下 RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用. 消息中间件在互联网公司的使用中越来越多,刚才还看到新闻阿里将RocketMQ捐献给了apache,当然了今天的主角还是讲RabbitMQ.消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来

[Spring实战系列](15)使用Spring基于Java的配置

并不是所有的开发人员都喜欢使用XML,所以Spring3.0 为这些人准备了一些特别的东西.可以几乎不使用XML而使用纯粹的Java代码来配置Spring应用.并且基于Java的配置拥有一些XML配置所不具有的技巧. 1. 创建基于Java的配置 即使Spring的Java配置可以让我们不使用XML就可以编写大多数的Spring配置,但是我们仍然需要极少量的XML来启用Java配置. <?xml version="1.0" encoding="UTF-8"?&

Spring基于java的配置

第一步:在XML中配置java信息,与自动检测配置XML一样: <context:component-scan base-package="com.springinaction.springidol"> </context:component-scan> 第二步:定义配置类 第三步:声明bean和bean的注入: package com.springinaction.springidol; import org.springframework.context.a

基于springboot&amp;mybatis的销售管理系统轻量级销售团队管理-java销售管理系统

基于springboot&mybatis的销售管理系统轻量级销售团队管理-java销售管理系统 1.包含源程序,数据库脚本.代码和数据库脚本都有详细注释.2.课题设计仅供参考学习使用,可以在此基础上进行扩展完善开发环境:Eclipse for J2EE, MYSQL5.1, JDK1.8, Tomcat 7涉及技术点:MVC模式.Mybatis.SpringBoot.HTML.JavaScript.CSS.JQUERY.DWR.Ajax等系统采用Mybatis框架实现ORM对象关系映射,前台JS

基于springboot的多数据源自动配置实现

最近做了一个自动支持多数据源配置的功能,基于springboot生态扩展,可自动识别配置文件中的数据库配置参数,并进行autoconfig. multiple-datasource多数据源支持模块 功能性 支持自动化配置多个数据源: 支持自动化配置持久层框架(mybatis): 支持自动化配置分布式事务管理器(JTA-Atomikos): 支持不同数据源使用不同数据库: 支持不同数据源使用不同数据库且使用不同连接池(hikari.dbcp2.tomcat-pool.druid等): 支持自动适配

基于SpringBoot&amp;SSM的医院药品管理系统-java医院药品管理系统

基于SpringBoot&SSM的医院药品管理系统-java医院药品管理系统 1.包含源程序,数据库脚本.代码和数据库脚本都有详细注释.2.课题设计仅供参考学习使用,可以在此基础上进行扩展完善开发环境:Eclipse ,MYSQL,JDK1.8,Tomcat 7涉及技术点:MVC模式.SpringBoot.SpringMvc.Mybatis.Spring.HTML.JavaScript.CSS.JQUERY.DWR.Ajax等系统采用Mybatis框架实现ORM对象关系映射,前台JSP实现,后台

SpringData 基于SpringBoot快速入门

SpringData 基于SpringBoot快速入门 本章通过学习SpringData 和SpringBoot 相关知识将面向服务架构(SOA)的单点登录系统(SSO)需要的代码实现.这样可以从实战中学习两个框架的知识,又可以为单点登录系统打下基础.通过本章你将掌握 SpringBoot项目的搭建,Starter pom的使用,配置全局文件,核心注解SpringBootApplication 介绍以及单元测试 SpringBootTest注解的使用.SpringData 的入门使用,Repos

基于spring-boot的应用程序的单元测试方案

概述 本文主要介绍如何对基于spring-boot的web应用编写单元测试.集成测试的代码. 此类应用的架构图一般如下所示: 我们项目的程序,对应到上图中的web应用部分.这部分一般分为Controller层.service层.持久层.除此之外,应用程序中还有一些数据封装类,我们称之为domain.上述各组件的职责如下: Controller层/Rest接口层: 负责对外提供Rest服务,接收Rest请求,返回处理结果. service层: 业务逻辑层,根据Controller层的需要,实现具体

基于SpringBoot开发一个Restful服务,实现增删改查功能

在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练.不过在看了很多关于SpringBoot的介绍之后,并没有想象中的那么难,于是开始准备学习SpringBoot. 在闲暇之余的时候,看了下SpringBoot实战以及一些大神关于SpringBoot的博客之后,开始写起了我的第一个SpringBoot的项目.在能够对SpringBoot进行一些简单的开发Re