AMQP基本作用

RabbitMQ官网Messaging that just works — RabbitMQ

一、RabbitMQ 是什么
AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个进程间传递异步消息的网络协议。

二、RabbitMQ模型

rabbitMQ的优点

1、降低系统耦合度。

2、高并发

4、支持消息持久化。

5、可靠性、灵活的路由、集群、事务、高可用的队列、消息排序、问题追踪、可视化管理工具、插件系统

工作过程

1、发布者发布消息,经由交换机。交换机根据路由规则将收到的消息分发给与该交换机绑定的队列。最后 AMQP 代理会将消息投递给订阅了此队列的消费者,或者消费者按照需求自行获取。

2、发布者、交换机、队列、消费者都可以有多个。同时因为 AMQP 是一个网络协议,所以这个过程中的发布者,消费者,消息代理 可以分别存在于不同的设备上。

3、发布者发布消息时可以给消息指定各种消息属性(Message Meta-data)。有些属性有可能会被消息代理(Brokers)使用,然而其他的属性则是完全不透明的,它们只能被接收消息的应用所使用。

4、从安全角度考虑,网络是不可靠的,又或是消费者在处理消息的过程中意外挂掉,这样没有处理成功的消息就会丢失。基于此原因,AMQP 模块包含了一个消息确认(Message Acknowledgements)机制:当一个消息从队列中投递给消费者后,不会立即从队列中删除,直到它收到来自消费者的确认回执(Acknowledgement)后,才完全从队列中删除。

5、在某些情况下,例如当一个消息无法被成功路由时(无法从交换机分发到队列),消息或许会被返回给发布者并被丢弃。或者,如果消息代理执行了延期操作,消息会被放入一个所谓的死信队列中。此时,消息发布者可以选择某些参数来处理这些特殊情况。

rabbit理论基础可以参考这篇博客  RabbitMQ的工作模式及原理

三、RabbitMQ安装步骤

我是基于linux下用docker安装的

 搜索rabbit镜像:  docker search rabbit

 下载rabbit镜像 : docker pull rabbitmq 

将镜像安装在容器中:  docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq

 启动容器 :docker start rabbit

 出现以下面图片则表示启动成功

进入容器交互页面:docker exec -it rabbit /bin/bash

在容器里面下载插件:rabbitmq-plugins enable rabbitmq_management

 访问地址:http://192.168.233.150:15672/

默认guest 用户,密码也是 guest

出现如下界面则表示安装成功

Spring­amqp 是对 AMQP 协议的抽象实现,而 spring­rabbit 是对协议的具体
实现,也是目前的唯一实现。底层使用的就是 RabbitMQ
四、spring集成 RabbitMQ
1:添加 AMQP 的启动器:
1 <dependency>
2 <groupId>org.springframework.boot</groupId>
3 <artifactId>spring‐boot‐starter‐amqp</artifactId>
4 </dependency>

监听者配置 :
  rabbitmq:
    host: 192.168.110.100
    username: hxzy
    password: hxzy
    virtual-host: hxzy
SpringAmqp 中,对消息的消费者进行了封装和抽象,一个普通的 JavaBean
的普通方法,只要通过简单的注解,就可以成为一个消费者。
监听消息
package hxzy.com.cn.controller;

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("msg")
public class MessageController {
    @Autowired
    private AmqpTemplate amqpTemplate;

    @GetMapping("/sendMsg")
    public void sendMsg(){
        String msg="goods price is updated!";//

        amqpTemplate.convertAndSend("gzhx.exchange","items.update",msg);
    }

}
发送者配置:
  rabbitmq:
    host: 192.168.110.100
    username: hxzy
    password: hxzy
    virtual-host: hxzy
发送消息
package hxzy.com.cn.listener;

import hxzy.com.cn.service.GoodsIndex;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MessageListener {
    @Autowired
    private GoodsIndex goodsIndex;
    //Queue:队列
    //durable:是否持久
    //@Exchange:交换机
        @RabbitListener(bindings = @QueueBinding(
                value = @Queue(value = "gzhx", durable = "true"),
                exchange = @Exchange(value = "gzhx.exchange", ignoreDeclarationExceptions = "true",
                                    type = ExchangeTypes.TOPIC
                ),key = {"items.update"}))
        public void accept(String msg){
            System.out.println(msg);
        }

}

出现如下则发送成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值