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>

最新文章

  1. Java集合-Python数据结构比较
  2. JAVA使用SAX解析XML文件
  3. Java Gson 简要笔记
  4. BlackBerry 9900刷机
  5. Windows下: RubyMine + Ruby On Rails + mysql 搭建开发环境
  6. nodejs 下载,安装,测试(windows环境下)
  7. IOS 沙盒机制 浅析
  8. HTML 表单验证和事件
  9. 龙芯将两款 CPU 核开源,这意味着什么?
  10. Android 中Activity生命周期分析(二):从AActivity 到BActivity过程分析
  11. 让struts2和servlet共存
  12. Mac 下ll命令 command not found
  13. MySQL 查询重复的数据,以及部分字段去重和完全去重
  14. 弹出框插件layer使用
  15. 碎片︱R语言与深度学习
  16. java 通过HttpURLConnection与servlet通信
  17. 初学者--oracle安装完后出现的一些问题
  18. java 8 双冒号运算符
  19. 51nod 1805 小树 (组合数模板,逆元公式)
  20. jdk8-Optional类

热门文章

  1. ASP.NET EF实体主外键关系
  2. Selenium与PhantomJS踩过的坑
  3. 浏览器输入 URL 之后的链路
  4. vue element-ui el-date-picker如何限制选择时间为当天之前
  5. C++线程同步与互斥之互斥体
  6. SSM框架之MyBatis入门介绍
  7. 交易开拓者旗舰版(TB旗舰版)软件升级中如何迁移用户数据
  8. Android笔记(六十七) 自定义控件
  9. sql写法,子节点名称拼接上级节点名称
  10. shell 变量的 {} ()