博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
消息中间件--RabbitMQ
阅读量:7091 次
发布时间:2019-06-28

本文共 1932 字,大约阅读时间需要 6 分钟。

hot3.png

一.RabbitMq的术语解释

exchange:交换机,一个交换机可以有多个路由(而每一个路由分别指向一个队列)。

queue:队列,一个队列可以对应多个交换机。

route-key:路由key,绑定交换机与队列的关系

交换机和队列是多对多的关系。

注意:

  • 一个broker中,交换机的name名字是唯一的,队列的name名字也是唯一的。
  • 发送消息的时候,必须指定发送的交换机和路由key,才能发送到对应的队列中
  • 接收消息的时候,只需要指定队列的名称,便可消费消息。

 

二.消息中间件的结构流程图--发送消息

121824_xqPx_2345835.png

说明:

1.连接到rabbitmq的一个broker,得到一个channel通道

2.声明一个交换机,如果不存在就创建,如果存在就忽略

3.声明一个队列,如果不存在就创建,如果存在就忽略

4.通过路由key绑定交换机和队列的关系

5.发送消息时,指定交换机,路由。然后交换机就根据路由发送到对应的队列上。

三.消息中间件的结构流程图--接收消息

124926_Pl2C_2345835.png

说明:

1.连接到rabbitmq的一个broker,得到一个channel通道

2.指明队列,获取消息

3.处理消息

四.java代码

消息发送代码:

public static void main(String[] args) throws IOException, TimeoutException {		//创建连接工厂		ConnectionFactory cf=new ConnectionFactory();		//设置用户信息,用户名-密码		cf.setUsername("guest");		cf.setUsername("guest");		//broker的ip,端口号		cf.setHost("127.0.0.1");		cf.setPort(5672);		//得到连接		Connection conn= cf.newConnection();		//创建一个通道		Channel channel=conn.createChannel();		//durable-消息是否持久化(true,broker重启后消息还存在)		//声明一个交换机,不存在就创建,存在就什么也不做		Exchange.DeclareOk declare=channel.exchangeDeclare("test.exchange1", "direct", true);		//声明一个队列,不存在就创建,存在就什么也不做		String queue=channel.queueDeclare("test.queue", false, false, false, null).getQueue();		//通过一个路由绑定交换机与队列的关系,不存在就创建,存在就什么也不做		channel.queueBind(queue, "test.exchange", "test");		//发送消息,指明交换机名称,路由。交换机收到消息后,通过路由发送到对应的队列中		channel.basicPublish("test.exchange", "test", null, "hello world".getBytes());		conn.close();	}

消息接收代码:

public static void main(String[] args) throws IOException, TimeoutException {		//创建连接工厂		ConnectionFactory cf=new ConnectionFactory();		//设置用户信息,用户名-密码		cf.setUsername("guest");		cf.setUsername("guest");		//broker的ip,端口号		cf.setHost("127.0.0.1");		cf.setPort(5672);				//得到连接		Connection conn= cf.newConnection();				//创建一个通道		Channel channel=conn.createChannel();		//指明要获取哪个队列的消息		GetResponse response= channel.basicGet("test.queue", true);		System.out.println(new String(response.getBody()));		conn.close();	}

 

转载于:https://my.oschina.net/yibuliushen/blog/784708

你可能感兴趣的文章
mvc.net分页查询案例——前台页面(Index.aspx)
查看>>
Code Force 429B Working out【递推dp】
查看>>
解决win7 64位操作系统下安装PL/SQL后连接报错问题: make sure you have the 32 bits oracle client installed...
查看>>
nonatomic,assign,copy,retain的区别
查看>>
nginx,linux压力测试工具webbench
查看>>
进程学习第一课--基本操作
查看>>
java1.8--OptionalInt,OptionalDouble,OptionalLong类
查看>>
Wireshark网络分析实战笔记(三)基本信息统计工具的使用方法
查看>>
mysql 经常使用命令整理总结
查看>>
【JAVA笔记——器】Spring面向切面编程 Aspect Oriented Programming with Spring
查看>>
Oracle监听静态注册和动态注册
查看>>
RHEL7-Samba共享测试
查看>>
ubuntu下 php 笔记
查看>>
js传输txt文档内容
查看>>
ThreadLocal与线程池使用的问题
查看>>
Linux时间子系统(十二) periodic tick
查看>>
死锁原因及解决、避免办法
查看>>
TF-IDF与余弦相似性的应用
查看>>
HTML盒子尺寸的计算
查看>>
java开发常用技术
查看>>