转载自 版权声明:本文为博主原创文章,艾特米工作室,欢迎转载 https://blog.csdn.net/zhaozao5757/article/details/79693670

消息驱动/RabbitMQ的使用

1、RabbitMQ服务器安装

这一章所使用的RibbitMQ的服务器版本是3.6.11(Windows版本),RibbitMQ的服务器要使用Erlang语言,所以需要先下载Erlang(20.4 64bit)

1.1、安装Erlang

  • Erlang
  • 傻瓜式安装

1.2、安装RabbitMQ-Server

  • 消息代理中间件
  • 傻瓜式安装
  • 安装完成后,管理器中能看到服务

1.3、查看插件

  • 进入rabbitmq的sbin目录下,按下shift键,鼠标右键

  • 查看插件:rabbitmq-plugins list

1.4、开启插件

  • 开启管理插件 :rabbitmq-plugins enable rabbitmq_management

1.5、访问RabbitMQ

  • 帐号密码均为:guest
  • 浏览器访问http://localhost:15672

2、消息生产者

  • 消息的生产者/消费者都属于客户端,均使用AMQP协议与RabbitMQ服务器进行通信
  • 向本机安装的RabbitMQ服务器发送消息
  • 新建Maven项目:atm_rabbitMq_producer

2.1、引入依赖

<!-- AMQP -->
<dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>4.2.0</version>
</dependency>
<!-- SLF4J日志 -->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.9</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2.2、main测试

  • http://www.rabbitmq.com/documentation.html
  • http://www.rabbitmq.com/api-guide.html
package com.atm.cloud;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;public class SendMessage {public static void main(String[] args) throws Exception {/** 1.生产者会发送消息给RabbitMQ服务器。 2.通过渠道叫消息发送给交换器。 3.交换器会发送给队列。 4.队列将消息发送给消费者。*/// 建立连接工厂ConnectionFactory factory = new ConnectionFactory();// 设置host,其实无需设置,默认为localhost,用户名/密码默认guest,端口默认5671// factory.setHost("localhost");// 创建新的连接Connection connection = factory.newConnection();// 通过连接创建渠道(向该渠道发送消息)Channel channel = connection.createChannel();// 声明交换器(默认绑定),交换器会将消息发送给队列,对列再发送给消费者// 直接声明队列,使用默认交换器String queueName = "MyQueueName";channel.queueDeclare(queueName, false, false, false, null);// 创建消息,使用渠道发布消息,""使用默认交换器,本列子中routingKey就使用queueNameString messageBody = "Hello Wrold!";channel.basicPublish("", queueName, null, messageBody.getBytes());// 发送之后,关闭渠道等(先关渠道,再关连接)channel.close();connection.close();}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

3、消息消费者

  • 读取刚刚的队列消息
package com.atm.cloud;import java.io.IOException;import com.rabbitmq.client.AMQP.BasicProperties;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;public class ReadMessage {public static void main(String[] args) throws Exception {// 建立连接工厂ConnectionFactory factory = new ConnectionFactory();// 创建新的连接Connection connection = factory.newConnection();Channel channel = connection.createChannel();String queueName = "MyQueueName";channel.queueDeclare(queueName, false, false, false, null);// 通过队列创建ConsumerConsumer consumer = new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope,BasicProperties properties, byte[] body) throws IOException {String msg = new String(body, "UTF-8");System.out.println("接收到的消息:" + msg);}};// 渠道绑定consumerchannel.basicConsume(queueName, consumer);}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

  • 程序是一直处于阻塞状态,连接着渠道去接收消息

  • 目前只需要了解大概流程,以后结合SpringCloud适合,就简单很多了

4、交换器、绑定与队列

  • 消息发送过来,消息自身带着一个routingKey,交换器根据该key进行队列的绑定

4.1、交换器

  • direct:根据生产者传过来的routingKey是否等于bindingkey,来决定将消息发送给哪个队列
  • topic:根据传过来的routingkey是否匹配一定的表达式,来决定消息发送给哪个或者哪些队列
  • fanout:将消息发送给交换器知道的全部队列,这种交换器会忽略掉设置的routingkey(广播机制)
  • headers:根据消息的头消息,来决定将消息发送给哪些队列

Spring Cloud_27_消息驱动/RabbitMQ的使用相关推荐

  1. Spring Cloud消息驱动整合 1

    Spring Cloud Stream 使用场景 消息驱动的微服务应用 目的 简化代码 统一抽象 主要概念 1.应用模型 2.Binder抽象 3.持久化 发布/订阅支持 4.消费分组支持 5.分区支 ...

  2. Spring Cloud构建微服务架构:消息驱动的微服务(入门)【Dalston版】

    之前在写Spring Boot基础教程的时候写过一篇<Spring Boot中使用RabbitMQ>.在该文中,我们通过简单的配置和注解就能实现向RabbitMQ中生产和消费消息.实际上我 ...

  3. Spring Cloud构建微服务架构:消息驱动的微服务(核心概念)【Dalston版】

    通过<Spring Cloud构建微服务架构:消息驱动的微服务(入门)>一文,相信大家对Spring Cloud Stream的工作模式已经有了一些基础概念,比如:输入.输出通道的绑定,通 ...

  4. (十七)Java springcloud B2B2C o2o多用户商城 springcloud架构-消息驱动 Spring Cloud Stream...

    在使用spring cloud云架构的时候,我们不得不使用Spring cloud Stream,因为消息中间件的使用在项目中无处不在,我们公司后面做了娱乐方面的APP,在使用spring cloud ...

  5. java B2B2C Springboot多租户电子商城系统-Spring Cloud Stream(消息驱动)

    1.什么是Spring Cloud Stream 愿意了解源码的朋友直接企鹅求求:二一四七七七五六三三 Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架.它可以基于 ...

  6. Spring Cloud架构教程 (六)消息驱动的微服务【Dalston版】

    Spring Cloud Stream是一个用来为微服务应用构建消息驱动能力的框架.它可以基于Spring Boot来创建独立的.可用于生产的Spring应用程序.它通过使用Spring Integr ...

  7. SpringCloud第九章(消息驱动Strem和RabbitMQ)

    目录 1:什么是Strem 2:Strem架构 2.1:传统的消息对列架构 2.2:strem的消息对列架构 3:案例介绍 3.1:8001生产者 3.2:8002.8003消费者配置一致 4:总结消 ...

  8. 【Java开发】Spring Cloud 10 :Stream消息驱动

    官方定义Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架.它为一些供应商的消息中间件产品提供了个性化的自动化配置实现,Spirng Cloud Stream 本质上 ...

  9. SpringCloud学习笔记 - 消息驱动 - Spring Cloud Stream

    1. stream为什么被引入 常见MQ(消息中间件): ActiveMQ RabbitMQ RocketMQ Kafka 有没有一种新的技术诞生,让我们不再关注具体MQ的细节,我们只需要用一种适配绑 ...

最新文章

  1. Response.Write()方法响应导致页面内容变形的问题
  2. P6295-有标号 DAG 计数【多项式求逆,多项式ln】
  3. mongodb存储数据_在MongoDB中存储分层数据
  4. 深入理解Netscaler INat
  5. 局部加权线性回归(Locally weighted linear regression)
  6. C#实现AES加密和解密
  7. [Contest20180418]物理竞赛
  8. Linux不能识别usbasp,USBasp制作资料及全过程(菜鸟版)
  9. CPU的内部架构和工作原理(简介)
  10. 软件测试适不适合女生来做?女生做软件测试有哪些好处?
  11. golang-亚马逊s3上传图片文件
  12. SQL基础编程——介绍及基本语法了解
  13. 巫师编程语言“咒语” 设想
  14. 智慧工厂三维可视化决策系统平台(数字孪生)-解决方案开发案例
  15. 美团外卖红包,商超生鲜红包,饿了么红包天天领,果蔬抢特价,大额满减券,返利优惠券源代码
  16. TIC12400相关配置-笔记
  17. [置顶]       VMWare不能安装64位操作系统原因探析
  18. 关于turtlebot仿真报错The majority of dropped messages were due to..... 修改记录
  19. VScode必备插件大全
  20. 美国中学生学计算机,我了解的一些美国学校和计算机(zz)

热门文章

  1. GPU加速技术原理介绍
  2. [译文] 程序员的禅修之路 走出浮躁的泥沼:把一件事做到某种境界
  3. Android 开发从入门到实战
  4. CMake I try_run与check_cxx_source_runs详解
  5. 电脑解锁后黑屏有鼠标_电脑开机后黑屏只显示鼠标指针是怎么回事?
  6. Mysql8.0.16 连接包报错解决方法
  7. Google Play再现多款恶意APP,大规模攻击活动或正在酝酿中
  8. CorelDRAW SE 2019中文版
  9. 老婆变心了如何挽回老婆
  10. Python 产生随机密码