Exchange交换机:

  sendMessage端,发送消息到Exchage1、2, 然后交换机通过路由键,将消息转发给队列queue中,最后客户端从队列中获取消息

交换属性:

  name:名称

  type:类型direct、topic、fanout、headers

  durability:是否持久化

  autoDelete:当最后一个绑定到exchange上的队列删除了,自动删除exchage(即当交换机没有和任何队列关联时,将自动删除交换机)

  internal:默认false(当前交换机是否为rabbitmq内部使用)

  arguments:扩展参数

direct exchage:直连交换机

  所有发送到Direct Exchage的消息被转发到RouterKey中指定的queue中

代码例子:

该例子和之前的quickStart类似,只是指令了交换机和路由键,其他代码相同

ConnectionFactory、Connection、Channel

ConnectionFactory、Connection、Channel,这三个都是RabbitMQ对外提供的API中最基本的对象。不管是服务器端还是客户端都会首先创建这三类对象。
     ConnectionFactory为Connection的制造工厂。

Connection是与RabbitMQ服务器的socket链接,它封装了socket协议及身份验证相关部分逻辑。

Channel是我们与RabbitMQ打交道的最重要的一个接口,大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。

Queue(队列)是RabbitMQ的内部对象,用于存储消息

生产端;

package com.xsxy.rabbitmq.demo.direct;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory; /**
* ProduceDirect
*/
public class ProduceDirect { public static void main(String[] args) throws Exception {
// 1、创建连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("59.110.232.8");
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/");
connectionFactory.setUsername("woaini");
connectionFactory.setPassword("woaini"); // 2、通过工厂获取连接
Connection connection = connectionFactory.newConnection(); // 3、获取通道
Channel channel = connection.createChannel(); String exchangeName = "directExchange";
String exchagenType = "direct";
String queueName = "test.direct.queue";
String routingKey = "test.direct";
// 4、声明交换机
channel.exchangeDeclare(exchangeName, exchagenType, true, false, null);
// 5、声明队列
channel.queueDeclare(queueName, true, false, false, null);
// 6、简历绑定关系
channel.queueBind(queueName, exchangeName, routingKey); // 7发行消息
for (int i = 0; i < 5; i++) { channel.basicPublish(exchangeName, routingKey, null, "testdirectexchage message".getBytes());
} System.err.println("消息已发送==========="); channel.close();
connection.close();
}
}

消费端:

package com.xsxy.rabbitmq.demo.direct;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer; import java.io.IOException;
import java.util.concurrent.TimeoutException; public class ConsumerDirect { public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {
// 1、创建连接
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("59.110.232.8");
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/");
connectionFactory.setUsername("woaini");
connectionFactory.setPassword("woaini"); // 2、通过Factory创建连接
Connection connection = connectionFactory.newConnection(); // 3、创建通道
Channel channel = connection.createChannel(); String queueName = "test.direct.queue";
// 声明队列
channel.queueDeclare(queueName, true, false, false, null); // 4、创建消费去列
QueueingConsumer queueingConsumer = new QueueingConsumer(channel); // 5、消费消息(非自动确认)
channel.basicConsume(queueName, false, queueingConsumer); // 6、监听消息
System.out.println("正在监听消息===");
while (true) {
QueueingConsumer.Delivery delivery = queueingConsumer.nextDelivery();
byte[] body = delivery.getBody();
System.out.println(new String(body));
// 手动确认
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
} }
}

运行结果:

队列消费者,用于监听队列中的消息。调用nextDelivery方法时,内部实现就是调用队列的take方法。该方法的作用:获取并移除此队列的头部,在元素变得可用之前一直等待(如果有必要)。说白了就是如果没有消息,就处于阻塞状态。

运行结果如下:(生产者、消费者谁先运行都可以)

  

相关博客:

https://www.kancloud.cn/longxuan/rabbitmq-arron/117514

rabbitmq-5-案例2-简单的案例+exchange的更多相关文章

  1. 简单登录案例(SharedPreferences存储账户信息)&联网请求图片并下载到SD卡(文件外部存储)

    新人刚学习Android两周,写一个随笔算是对两周学习成果的巩固,不足之处欢迎各位建议和完善. 这次写的是一个简单登录案例,大概功能如下: 注册的账户信息用SharedPreferences存储: 登 ...

  2. MyBatis学习总结(一)简单入门案例

    MyBatis学习总结(一)简单入门案例 主要内容:本文主要通过对数据库中的use表进行增删改查总结mybatis的环境搭建和基本入门使用 一.需要的jar包: 1.核心包 2.依赖包 3.jdbc数 ...

  3. 一个简单的案例带你入门Dubbo分布式框架

    相信有很多小伙伴都知道,dubbo是一个分布式.高性能.透明化的RPC服务框架,提供服务自动注册.自动发现等高效服务治理方案,dubbo的中文文档也是非常全的,中文文档可以参考这里dubbo.io.由 ...

  4. solr简单搜索案例

    solr简单搜索案例 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字搜索商品信息,根据商品分类.价格过滤搜索结果,也可以根据价格进行排序,实现分页. 架构分为: 1. solr服务器 2. ...

  5. 3星|《结构思考力》:用金字塔原理整理PPT的思路,案例偏简单

    结构思考力 名义上全书是讲结构化思考,实际内容是用结构化思考的方法来整理PPT的思路,让PPT的逻辑更清晰.少部分提到如何修改标题更吸引人,如何做图表设计. 书中结构化思考的基本思路,重要的有两个:1 ...

  6. springcloud+eureka简单入门案例

    springcloud+eureka简单入门案例 一.服务提供者 直接提供服务,入门案例没有特别要设置的地方,注意下端口,由于要启动多个服务,可能会冲突 配置文件(src/main/resources ...

  7. Python 简单爬虫案例

    Python 简单爬虫案例 import requests url = "https://www.sogou.com/web" # 封装参数 wd = input('enter a ...

  8. arduino中SCoop库的简单应用案例

    转载:https://www.csdn.net/gather_27/MtTaggzsMDExMS1ibG9n.html arduino中SCoop库的简单应用案例首先这篇文章来在视频https://v ...

  9. ReentrantReadWriteLock读写锁简单原理案例证明

    ReentrantReadWriteLock存在原因? 我们知道List的实现类ArrayList,LinkedList都是非线程安全的,Vector类通过用synchronized修饰方法保证了Li ...

  10. redux 的简单实用案例

    redux 的简单实用案例 整体思想与结构 创建一个Action 创建一个Reducer 创建Store 在App组件开始使用 整体思想与结构 文件目录如下: 构建 action,通过创建一个函数,然 ...

随机推荐

  1. Vue PC端图片预览插件

    *手上的项目刚刚搞完了,记录一下项目中遇到的问题,留做笔记: 需求: 在项目中,需要展示用户上传的一些图片,我从后台接口拿到图片url后放在页面上展示,因为被图片我设置了宽度限制(150px),所以图 ...

  2. Linux查看关闭进程

    ps:进程的静态列表(Process status) - PID:进程号,每个进程独一无二的标识符(关闭进程需要使用) - TTY:终端所属,表明进程产生于哪一个终端,对于多用户使用的Linux服务器 ...

  3. vue脚手架安装

    1. 脚手架:  如何:   1. 安装脚手架的工具命令:      npm i -g @vue/cli   电脑安装完命令后  :  直接创建  vue create 文件夹名字   2. 用命令反 ...

  4. ELKStack之生产案例(下)

    ELKStack之生产案例(下) 链接:https://pan.baidu.com/s/1V2aYpB86ZzxL21Hf-AF1rA 提取码:7izv 复制这段内容后打开百度网盘手机App,操作更方 ...

  5. 牛客小白月赛16 H小阳的贝壳 (线段树+差分数组)

    链接:https://ac.nowcoder.com/acm/contest/949/H来源:牛客网 题目描述 小阳手中一共有 n 个贝壳,每个贝壳都有颜色,且初始第 i 个贝壳的颜色为 colico ...

  6. LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现

    题目描述: python实现 Search in Rotated Sorted Array 搜索旋转排序数组   中文:假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1 ...

  7. 测试单点登录xml配置

    <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://w ...

  8. 基于oracle 的PL/SQL编程 - 存储过程

    接上篇,游标使用的语句,相当于一段匿名的函数,窗口关闭了就不存在了.如果想要窗口关闭了,还能继续执行那段代码,就需要存储过程了: PLSQL是指一个个PLSQL的业务处理过程存储起来进行复用,这些被存 ...

  9. shell脚本学习(5)join

    join  不是简单的把两个文本连接起来 sale.txt quotas.txt

  10. php stripcslashes()函数 语法

    php stripcslashes()函数 语法 作用:删除由 addcslashes() 函数添加的反斜杠.深圳直线电机 语法:stripcslashes(string) 参数: 参数 描述 str ...