消息队列RabbitMq--01

什么是消息队列?

​ 消息队列(message queue):是一种进程间通信或同一进程的不同线程间的通信方式。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:
消息的发送者和接收者不需要同时与消息队列互交。消息会保存在队列中,直到接收者取回它;

优缺点

​ 消息队列本身是异步的,它允许接受者在消息发送很长时间后再取回消息,这个和大多数通信协议是不同的。例如http协议是同步的,因为客户端在发出请求后必须等待服务器回应。然而,很多情况下我们需要同步的通信协议。

​ 和信号相比,消息队列能够传递更多的信息。与管道相比,消息队列提供了有格式的数据,但消息队列仍有大小限制。

​ RabbitMq:性能好,支持高并发,基于erlang语言,支持持久化消息:就是mq挂了或者服务器挂了,重新连接后消息不会丢失···

QM特点

​ mq是消费者-生产者模型的一个典型代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息MQ 和 JMS 类似,但不同的是 JMS是 SUN JAVA 消息中间件服务的一个标准和 API 定义,而 MQ 则是遵循了 AMQP 协议的具体实现和产品。

​ AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端、中间件不同产品,不同的开发语言等条件的限制。

使用场景

​ 在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。

消息队列RabbitMq

​ 实时性要求不高的场景,通过异步处理程序中产生的消息 第三方实现(软件) RabbitMq 属于MQ产品中的一种底层通过C环境编写,基于Erlang 环境 。

应用场景

1.用户注册(短信、邮件发送操作)

2.日志收集(用户系统操作日志(管理后台),用户行为日志)

3.电商商品页面静态化(Freemarker)

4.电商秒杀场景(流量削峰)

5.电商中高并发场景下订单

···

RabbitMq

RabbitMq 下载与安装

1.下载erlang并安装

​ 先下载指定版本Erlang 软件 版本对照参考:http://www.rabbitmq.com/which-erlang.html

​ 安装Erlang (与普通软件安装没有区别)

2.下载并安装Rabbitm
下载地址 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.9/rabbitmq-server-3.7.9.exe

​ 安装RabbitMq (与普通软件安装没有区

3. 校验RabbitMq是否安装成功
rabbitmqctl status 校验Rabbitmq安装状态
rabbitmq-plugins.bat list 列表展示Rabbitmq支持的插件列表
rabbitmq-plugins.bat enable rabbitmq_management 启用管理控制台
4.连接rabbitmq服务器

​ 1270.0.1:15672 ---- 用户名:guest 密码:guest

RabbitMq 的用户角色分类

​ none、management、policymaker、monitoring、administrator

RabbitMq的几种模式

http://www.rabbitmq.com/getstarted.html

Spring集成RabbitMq

1.添加依赖

   <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit</artifactId>
            <version>1.6.5.RELEASE</version>
        </dependency>

2.通过加载配置文件

​ 添加配置文件Rabbitmq.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:rabbit="http://www.springframework.org/schema/rabbit"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
	    http://www.springframework.org/schema/rabbit
	    http://www.springframework.org/schema/rabbit/spring-rabbit.xsd" >
    <context:component-scan base-package="com.shsxt"></context:component-scan>
    <!--
       rabbitmq 基本配置
    -->
    <!--
      连接工厂配置
    -->
    <rabbit:connection-factory id="connectionFactory" host="127.0.0.1" port="5672"  username="xxx" password="xxx" virtual-host="/xxx"></rabbit:connection-factory>
    <rabbit:admin  connection-factory="connectionFactory"></rabbit:admin>
    <!--
      交换机
      队列
      模板类
      监听容器
    -->
    <rabbit:topic-exchange name="springExchange">
        <rabbit:bindings>
            <rabbit:binding pattern="test.#" queue="myQueue"></rabbit:binding>
            <rabbit:binding pattern="sms.#" queue="spring_sms"></rabbit:binding>
            <rabbit:binding pattern="mail.#" queue="spring_mail"></rabbit:binding>
        </rabbit:bindings>
    </rabbit:topic-exchange>
    <!--
      指定队列
    -->
    <rabbit:queue name="myQueue"></rabbit:queue>
    <rabbit:queue name="spring_sms"></rabbit:queue>
    <rabbit:queue name="spring_mail"></rabbit:queue>
    <!--
      模板类
    -->
    <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="springExchange" routing-key="test" ></rabbit:template>
    <!--
       监听容器
    -->
    <rabbit:listener-container connection-factory="connectionFactory">
        <rabbit:listener ref="testService" method="test" queue-names="myQueue"></rabbit:listener>
        <rabbit:listener ref="testService" method="sms" queue-names="spring_sms"></rabbit:listener>
        <rabbit:listener ref="testService" method="mail" queue-names="spring_mail"></rabbit:listener>
    </rabbit:listener-container>
</beans>

​ 编写一个消费 TestService的类

@Service
public class TestService {

    public void test(Object obj){
        System.out.println("消费者获取到消息-->"+obj);
    }
    public void sms(Object obj){
        System.out.println("短信发送消费方收到消息-->msg"+obj);
    }

    public void mail(Object obj){
        System.out.println("邮件发送消费方收到消息-->msg:"+obj);
    }
}

​ 添加测试方法

public class Test {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("rabbitmq.xml");
        AmqpTemplate ampqTemplate = (AmqpTemplate) applicationContext.getBean("amqpTemplate");
        //amqpTemplate.convertAndSend("hello spring rabbitmq");
        ampqTemplate.convertAndSend("springExchange","mail","ch@163.com");
    }
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值