springboot+cloud学习消息中间件ribbitmq

willpan_z      2022-04-09     780

关键词:

安装RabbitMQ

window下安装: 

(1):下载erlang,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,下载地址:http://www.erlang.org/downloads,双击.exe文件进行安装就好,安装完成之后创建一个名为ERLANG_HOME的环境变量,其值指向erlang的安装目录,同时将%ERLANG_HOME%\bin加入到Path中,最后打开命令行,输入erl,如果出现erlang的版本信息就表示erlang语言环境安装成功;

 (2):下载RabbitMQ,下载地址:http://www.rabbitmq.com/,同样双击.exe进行安装就好。然后下载RabbitMQ 管理插件,可以更好的可视化方式查看Rabbit MQ 服务器实例的状态。
1.使用管理员打开命令窗口,进入安装目录sbin:
输入命令:rabbitmq-plugins.bat enable rabbitmq_management

2.安装成功后,重启服务器

输入命令:net stop RabbitMQ && net start RabbitMQ

3.用户及权限管理

使用rabbitmqctl控制台命令来创建用户,密码,绑定权限等。

查看已有用户及用户的角色:rabbitmqctl.bat list_users  默认会存在一个来宾账号 guest

新增一个用户:rabbitmqctl.bat add_user username password

 

 

 

新增成功后,可以看见新增的角色为[],guest的角色是administor。

rabbitmq用户角色可分为五类:超级管理员, 监控者, 策略制定者, 普通管理者以及其他

(1) 超级管理员(administrator)
可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
(2) 监控者(monitoring)
可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等) 
(3) 策略制定者(policymaker)
可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。
(4) 普通管理者(management)
仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
(5) 其他的
无法登陆管理控制台,通常就是普通的生产者和消费者

下面给新增的用户来增加administrator角色

rabbitmqctl.bat set_user_tags username administrator

4.消息队列的管理

使用浏览器打开 http://localhost:15672 访问Rabbit Mq的管理控制台,使用刚才创建的账号登陆系统:

 

RibbitMQ的具体运用

结构原理:

spring cloud stream

Spring Cloud Stream 是一个构建消息驱动微服务的框架.

 

 

应用程序通过 inputs 或者 outputs 来与 Spring Cloud Stream 中binder 交互,通过我们配置来 binding ,而 Spring Cloud Stream 的 binder 负责与中间件交互。

Binder 是 Spring Cloud Stream 的一个抽象概念,是应用与消息中间件之间的粘合剂。

通过 binder ,可以很方便的连接中间件,可以动态的改变消息的destinations(对应于 Kafka 的topic,Rabbit MQ 的 exchanges)

,这些都可以通过外部配置项来做到。

 新建一个stream项目,主要有3部分,消息产生者类(provider),消息消费者类(receive),stream input/output通道定义类(source)

 由于是微服务框架,这里我把stream的有关定义都放到了这个项目集中定义,其他用到stream的项目直接引入这个项目的jar包就可以使用其中的类:

 

消息提供者配置:

public interface MessageProviderSource {

    // exchange名称
    public static final String EXCHANGE_OUT = "exporttv_exchange_out";
    
    // 绑定exchange
    @Output(MessageProviderSource.EXCHANGE_OUT)
    public MessageChannel messageOutput();
 
    
}
@EnableBinding(MessageProviderSource.class)
public class MessageProvider {

    @Autowired
    private MessageProviderSource messageSource;

    public void sendApplicationLoadMessage(HashMap<String, Integer> map) {
    // 创建并发送消息
    messageSource.messageOutput().send(message(map));
    }

    private static final <T> Message<T> message(T val) {
    return MessageBuilder.withPayload(val).build();
    }
}

消息消费者配置:

public interface MessageReceiveSource {

    // exchange名称
    public static final String EXCHANGE_IN = "exporttv_exchange_in";
    // 绑定通道
    @Input(MessageReceiveSource.EXCHANGE_IN)
    public SubscribableChannel  messageIutput();
}
@EnableBinding(MessageReceiveSource.class) 
public class MessageReceive {
    
    @StreamListener(MessageReceiveSource.EXCHANGE_IN)
    public void ApplicationLoadMessage(Message<HashMap<String,Integer>> message) {
    
    }
}

然后其他项目引入这个项目后,还要在yml中配置一下绑定:

消息提供者yml

spring:
  cloud:
    stream:
      bindings: # 服务的整合处理 
        exporttv_exchange_out: 
          destination: exporttv_exchange # 绑定exchange
          content-type: application/json # 设置消息类型
          binder: exporttv-rabbitmq      # 消息中间件
      binders:
        exporttv-rabbitmq:
          type: rabbit
          environment:
            spring:
              rabbitmq:
                host: localhost
                port: 5672
                username: guest
                password: guest
                virtual-host: /

消息消费者yml:

spring:
  cloud:
    stream:
      bindings: # 服务的整合处理 
        exporttv_exchange_in: 
          destination: exporttv_exchange # 绑定exchange
          content-type: application/json # 设置消息类型
          group: exporttv-group          # 进行操作的分组
          binder: exporttv-rabbitmq      # 消息中间件
      binders:
        exporttv-rabbitmq:
          type: rabbit
          environment:
            spring:
              rabbitmq:
                host: localhost
                port: 5672
                username: guest
                password: guest
                virtual-host: /

下面说说提供者和消费者怎么引用之前定义的类

消息提供者项目:

 

@Service
public class SendApplicationMessage {

    @Autowired
    private MessageProvider messageProvider;

    public void SendApplicationLoadMessage() {

    try {

        // 业务功能省略
       

        messageProvider.sendApplicationLoadMessage();

    } catch (Exception e) {
        // 打印错误日志
        LogUtil.printLog(e, Exception.class);
        // 抛出错误
        throw new MyRuntimeException(ResultEnum.DBException);
    }
    }

}

消息消费者子项目:

 

@Component
public class ReceiveApplicationMessage extends MessageReceive{
    
    @Autowired
    private ApplicationService applicationService;
    
    @Override
    public void ApplicationLoadMessage(Message<HashMap<String,Integer>> message) {
    
    Integer toalYear = message.getPayload().get("year");
    Integer toalMonth = message.getPayload().get("month");
    Integer toalWeek = message.getPayload().get("week");
    Integer toanId = message.getPayload().get("toanId");
    
    applicationService.updateApplicationLoad(toalYear, toalMonth, toalWeek, toanId);
    }
    
}

个人觉得这样做不够好,后期再改进

springboot入门mq使用

本文记录学习在SpringBoot中使用MQ。一什么是MQ  MQ全称(MessageQueue)又名消息队列,是一种异步通讯的中间件。它的作用类似于邮局,发信人(生产者)只需要将信(消息)交给邮局,然后由邮局再将信(消息)发送给具体的接收者(... 查看详情

springboot系列-springboot整合rabbitmq

一RabbitMQ的介绍    RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿里巴巴公司的,现已经转让给apache).  消息中间件的工作过程可... 查看详情

springboot集成kafka消息中间件

一.创建Springboot项目,添加如下依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><gro 查看详情

springboot集成kafka消息中间件

一.创建Springboot项目,添加如下依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><gro 查看详情

springboot之rabbitmq的使用

一、RabbitMQ的介绍RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件,消息中间件的工作过程可以用生产者消费者模型来表示.即,生产者不断的向消息队列发送信息,而消费者从消息队列中... 查看详情

springboot整合rabbitmq转载https://www.cnblogs.com/hlhdidi/p/6535677.html(代码片段)

springboot学习笔记-6springboot整合RabbitMQ一RabbitMQ的介绍    RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿里巴巴公司的,现已经转让... 查看详情

springboot消息服务(代码片段)

SpringBoot消息服务在实际项目开发中,有时候需要与其他系统进行集成完成相关业务功能,这种情况最原始的做法是程序内部相互调用,除此之外,还可以使用消息服务中间件进行业务处理,使用消息服务中间... 查看详情

消息中间件-----rabbitmq集成springboot

引入jar包<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM 查看详情

24springboot集成activemq

...多的消息队列有ActiveMQ、RabbitMQ、Kafka、RocketMQ、MetaMQ等。springboot提供了对JMS系统的支持;springboot很方便就可以集成这些消息中间件。对 查看详情

springboot之rabbitmq

RabbitMQ即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。消息中间件在互联网公司的使用中越来越多,刚才还看到新闻阿里将RocketMQ捐献给了Apache,当然了今天的主角还是讲Rabbi... 查看详情

springboot与消息

一、概述大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力消息服务中两个重要概念:消息代理(messagebroker)和目的地(destination)当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递... 查看详情

springboot操作memcache

1   第4-1课:SpringBoot操作Memcache《精通SpringBoot42讲》共分五大部分,第四部分主要讲解SpringBoot和中间件的使用,共10课,中间件是互联网公司支撑高并发业务的必备组件,常用的组件有缓存、消息中间件、NoSQL数据库、... 查看详情

springboot与消息

一、消息概述在大多数应用中,可以通过消息服务中间件来提升系统的异步通信、扩展解耦和流量削峰等能力。当消息发送者发送消息后,将由消息代理接管,消息代理保证消息传递到指定目的地。消息队列主要有两种形式的目... 查看详情

消息中间件学习笔记——rabbitmq

文章目录一、消息中间件概述二、消息中间件(MQ)的优劣(1).MQ的优势(2).MQ的劣势系统可用性降低系统复杂度提高一致性问题三、常见的MQ产品四、RabbitMQ中的概念五、如何实现RabbitMQ的延迟对列一、消息中间件概述 通过... 查看详情

springboot异步消息之amqp讲解及实战(附源码)(代码片段)

觉得有帮助请点赞关注收藏~~~AMQP(高级消息队列协议)是一个提供统一消息服务的应用层标准高级消息队列协议。是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递... 查看详情

springboot与消息(rabbtimq)

1.大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力1.1异步通信1.2解耦1.3削峰2.消息服务中两个重要概念:      消息代理(messagebroker)和目的地(destination)当消息发送者发送消息以... 查看详情

springboot整合rabbitmq

1.大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力2.消息服务中两个重要概念:消息代理(messagebroker)和目的地(destination)当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指... 查看详情

消息队列学习--activemq概念了解

上一章节我们学习了RabbitMQ中间件的相关知识,今天我们就来接着学习另一个中间件ActiveMQ。一、简介AcitiveMQ是由Apache出品的开源消息中间件,可提供高效、可扩展、稳定、安全的企业级消息通信。其具有以下特性:... 查看详情