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>

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

  1. 基于SpringBoot的Environment源码理解实现分散配置

    前提 org.springframework.core.env.Environment是当前应用运行环境的公开接口,主要包括应用程序运行环境的两个关键方面:配置文件(profiles)和属性.Envi ...

  2. Spring 基于 Java 的配置

    前面已经学习如何使用 XML 配置文件来配置 Spring bean. 基于 Java 的配置可以达到基于XML配置的相同效果. 基于 Java 的配置选项,可以使你在不用配置 XML 的情况下编写大 ...

  3. Java编程配置思路详解

    Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...

  4. 消息队列1:RabbitMQ解析并基于Springboot实战

    RabbitMQ简介 AMQP:Advanced Message Queue,高级消息队列协议.它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产 ...

  5. 干货!基于SpringBoot的RabbitMQ多种模式队列实战

    目录 环境准备 安装RabbitMQ 依赖 连接配置 五种队列模式实现 1 点对点的队列 2 工作队列模式Work Queue 3 路由模式Routing 4 发布/订阅模式Publish/Subsc ...

  6. JeecgBoot 2.1.1 代码生成器AI版本发布,基于SpringBoot+AntDesign的JAVA快速开发平台

    此版本重点升级了 Online 代码生成器,支持更多的控件生成,所见即所得,极大的提高开发效率:同时做了数据库兼容专项工作,让 Online 开发兼容更多数据库:Mysql.SqlServer.Ora ...

  7. Java 获取小程序openid(基于SpringBoot)

    Java 获取小程序openid(基于SpringBoot) 官方文档 wx.login 1.引入Request封装依赖 <!--Request依赖--> <dependency&g ...

  8. Spring IOC之基于JAVA的配置

    基础内容:@Bean 和 @Configuration 在Spring中新的支持java配置的核心组件是 @Configuration注解的类和@Bean注解的方法. @Bean注解被用于表明一个方法 ...

  9. (4.1)Spring MVC执行原理和基于Java的配置过程

    一.Spring MVC执行原理和基于Java配置的配置过程 (一)Spring MVC执行过程,大致为7步. 所有的请求都会经过Spring的一个单例的DispacherServlet. Dispa ...

随机推荐

  1. docker-每天5分钟玩转Docker容器技术

    安装 https://www.cnblogs.com/qinxu/p/10032176.html 安装教程,目前只能安装到18版本的,安装完后执行下面命令更新到版本19 yum install doc ...

  2. centos7 设置 查看 开机 启动项

    1.查看开机自启项centos7自启项已不用chkconfig改为:systemctl list-unit-files左边是服务名称,右边是状态,enabled是开机启动,disabled是开机不启动 ...

  3. Springboot项目统一异常处理

    Springboot项目统一异常处理 一.接口返回值封装 1. 定义Result对象,作为通用返回结果封装 2. 定义CodeMsg对象,作为通用状态码和消息封装 二.定义全局异常类 三.定义异常处理 ...

  4. SAP云平台里的三叉戟应用

    大家第一次看到SAP MTA这个词组,会联想到什么? Jerry第一次看到的时候,联想到的是那一个个足坛著名的三叉戟攻击组合. 海皇波塞冬(Poseidon),奥林匹斯十二神中地位仅次于宙斯的大神,海 ...

  5. 一个关于integer表示范围的问题

    1:在做字符串parse为integer 类型市,一直出现问题就是当我parse “”2851663837”报错, 但是当我parse “1417585794”  可以.原来是超出integer 类型 ...

  6. Android笔记(五十四) Android四大组件之一——ContentProvider(一)

    ContentProvider提供数据 在Android中,他的每个应用都是相互独立的,各自运行在自己的Dalvik虚拟机中,但现实使用中常常需要在多个应用之间进行数据交换,例如发短信需要获取联系人中 ...

  7. springboot2.1.3使用jdbcTemplate

    这里只是备忘一下使用方式,至于配置数据源信息不在此文中讲解,忘谅解. 1.  查询返回List<Long>数据集 (这里比如返回userId,long型) @Autowired@Quali ...

  8. 大数据技术之Hadoop3.1.2版本伪分布式部署

    大数据技术之Hadoop3.1.2版本伪分布式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.主机环境准备 1>.操作系统环境 [root@node101.yinzh ...

  9. SOAP知识点

    SOAP简介: SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换. 或者更简单地说:SOAP 是用于访问网络服务的协议. 1.什么是 SOAP? SOAP 指简易对象访 ...

  10. sqlite3入门之sqlite3_get_table,sqlite3_free_table

    sqlite3_get_table sqlite3_get_table函数原型: int sqlite3_get_table( sqlite3 *db, /* An open database */ ...