Spring boot整合RabbitMQ(Windows)

目录

1.环境搭建

(1)Erlang的安装

(2)RabbitMQ的安装

2.启动及可视化配置

(1)启动

(2)可视化

3.整合(direct模式)

(1)导入依赖

(2)配置地址

(3)代码实现

4.整合(topic模式)

(1)导入依赖

(2)配置地址

(3)代码实现

(4)说明

5.总结


1.环境搭建

(1)Erlang的安装

RabbitMQ 基于 Erlang 语言编写,需要安装 Erlang
Erlang
安装:一键傻瓜式安装,安装 完毕需要重 启, 需要依赖 Windows 组件
环境变量 配置
ERLANG_HOME:安装目录

                      PATH:安装目录下的bin目录

安装完毕需要重启,需要重启,需要重启。

安装的过程中可能会出现依赖Windows组件的提示,根据提示下载安装即可,都是自动执行的

(2)RabbitMQ的安装

安装:一键傻瓜式安装

2.启动及可视化配置

(1)启动

启动服务
cd sbin的目录下
rabbitmq-service.bat start
关闭服务
cd sbin的目录下
rabbitmq-service.bat stop
查看服务状态
cd sbin的目录下
rabbitmq-service.bat status

(2)可视化

可视化通过一个插件来实现,开启插件服务之后需要重新启动一下RabbitMQ的服务
查看已安装的插件列表
cd sbin的路径下
rabbitmq-plugins.bat list
开启服务管理插件
cd sbin的路径下
rabbitmq-plugins.bat enable rabbitmq_management
访问服务器
http://localhost:15672
用户名&密码:guest
服务端口:5672,管理后台端口:15672

注意:activemq与rabbitmq有一个端口冲突问题,学习阶段无论操作哪一个?请确保另一个处于关闭状态。

3.整合(direct模式)

直连型交换机,根据消息携带的路由键将消息投递给对应队列。

大致流程,有一个队列绑定到一个直连交换机上,同时赋予一个路由键 routing key 。
然后当一个消息携带着路由值为X,这个消息通过生产者发送给交换机时,交换机就会根据这个路由值X去寻找绑定值也是X的队列

(1)导入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

(2)配置地址

 spring: 
  rabbitmq:
    host: 127.0.0.1
    port: 5672

(3)代码实现

发送消息的接口

package com.example.demo.rabbitmq;

public interface MessageService {

    //发送消息
    public void sendMessage(String msg);

    //接收消息
    public String doMessage();
}

发送消息的实现类,将消息发送指定的交换机和路由

package com.example.demo.rabbitmq.direct;

import com.example.demo.rabbitmq.MessageService;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author linaibo
 * @version 1.0
 * Create by 2022/12/10 15:50
 */
@Service
public class MessageServiceRabbitmqDirectService implements MessageService {

    @Autowired
    private AmqpTemplate amqpTemplate;

    @Override
    public void sendMessage(String msg) {
        System.out.println("待发送的消息已经添加到消息队列中" + msg);
        amqpTemplate.convertAndSend("directExchange","direct",msg);
    }

    @Override
    public String doMessage() {
        return null;
    }
}

通过配置文件来设置队列,交换机以及绑定队列和交换机的路由,可以设置多个队列,绑定同一个交换机,并使用不同的路由。

package com.example.demo.rabbitmq.direct.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author linaibo
 * @version 1.0
 * Create by 2022/12/10 15:56
 */
@Configuration
public class DirectRabbitConfig {

    @Bean
    public Queue directQueue(){
        return new Queue("direct_queue");
    }
    @Bean
    public DirectExchange directExchange(){
        return new DirectExchange("directExchange");
    }
    @Bean
    public Binding bindingDirect(){
        return BindingBuilder.bind(directQueue()).to(directExchange()).with("direct");
    }
}

设置监听器,注意监听的是队列,这里通过队列名来指定

package com.example.demo.rabbitmq.direct.listener;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @author linaibo
 * @version 1.0
 * Create by 2022/12/10 20:39
 */
@Component
public class MessageListener {

    @RabbitListener(queues = "direct_queue")
    public void getMessage(String msg){
        System.out.println("已经接收到发送的消息,msg=" + msg);
    }
}

4.整合(topic模式)

(1)导入依赖

参照上面

(2)配置地址

参照上面

(3)代码实现

发送消息的接口

package com.example.demo.rabbitmq;

public interface MessageService {

    //发送消息
    public void sendMessage(String msg);

    //接收消息
    public String doMessage();
}

接口的实现类

package com.example.demo.rabbitmq.topic;

import com.example.demo.rabbitmq.MessageService;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author linaibo
 * @version 1.0
 * Create by 2022/12/10 15:50
 */
@Service
public class MessageServiceRabbitmqTopicService implements MessageService {

    @Autowired
    private AmqpTemplate amqpTemplate;

    @Override
    public void sendMessage(String msg) {
        System.out.println("待发送的消息已经添加到消息队列中(topic)" + msg);
        amqpTemplate.convertAndSend("topicExchange","topic.orders.id",msg);
    }

    @Override
    public String doMessage() {
        return null;
    }
}

配置类

package com.example.demo.rabbitmq.topic.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author linaibo
 * @version 1.0
 * Create by 2022/12/11 14:04
 */
@Configuration
public class TopicRabbitConfig {

    @Bean
    public Queue topicQueue() {
        return new Queue("topic_queue");
    }

    @Bean
    public TopicExchange topicExchange() {
        return new TopicExchange("topicExchange");
    }

    @Bean
    public Binding bindingTopic() {
        return BindingBuilder.bind(topicQueue()).to(topicExchange()).with("topic.orders.*");
    }


}

监听器

package com.example.demo.rabbitmq.topic.listener;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @author linaibo
 * @version 1.0
 * Create by 2022/12/10 20:39
 */
@Component
public class MessageListener {

    @RabbitListener(queues = "topic_queue")
    public void getMessage(String msg){
        System.out.println("已经接收到发送的消息(topic),msg=" + msg);
    }
}

(4)说明

和直连交换机的区别,在路由key的设置上,主题交换机更加强大

绑定键匹配规则
( 星号 ) 用来表示一个单词 ,且该单词是必须出现的
( 井号 ) 用来表示任意 数量

 

5.总结

springboot整合RabbitMQ提供了AmqpTemplate对象作为客户端操作消息队列
操作RabbitMQ需要配置RabbitMQ服务器地址,默认端口5672
企业开发时通常使用监听器来处理消息队列中的消息,设置监听器使用注解@RabbitListener
RabbitMQ有5种消息模型,使用的队列相同,但是交换机不同。交换机不同,对应的消息进入的策略也不同

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该项目是采用目前比较流行的SpringBoot/SpringCloud构建微服务电商项目,项目叫 《果然新鲜》,实现一套串联的微服务电商项目。完全符合一线城市微服务电商的需求,对学习微服务电商架构,有非常大的帮助,该项目涵盖从微服务电商需求讨论、数据库设计、技术选型、互联网安全架构、整合SpringCloud各自组件、分布式基础设施等实现一套完整的微服务解决方案。 项目使用分布式微服务框架,涉及后台管理员服务、地址服务、物流服务、广告服务、商品服务、商品类别服务、品牌服务、订单服务 、购物车服务、首页频道服务、公告服务、留言服务、搜索服务、会员服务等。  系统架构图   SpringBoot+SpringCloud+SSM构建微服务电商项目使用SpringCloud Eureka作为注册中心,实现服务治理使用Zuul网关框架管理服务请求入口使用Ribbon实现本地负载均衡器和Feign HTTP客户端调用工具使用Hystrix服务保护框架(服务降级、隔离、熔断、限流)使用消息总线Stream RabbitMQ和 Kafka微服务API接口安全控制和单点登录系统CAS+JWT+OAuth2.0分布式基础设施构建分布式任务调度平台XXL-JOB分布式日志采集系统ELK分布式事务解决方案LCN分布式锁解决方案Zookeeper、Redis分布式配置中心(携程Apollo)高并发分布式全局ID生成(雪花算法)分布式Session框架Spring-Session分布式服务追踪与调用链Zipkin项目运营与部署环境分布式设施环境,统一采用Docker安装使用jenkins+docker+k8s实现自动部署微服务API管理ApiSwagger使用GitLab代码管理(GitHub  GitEE)统一采用第三方云数据库使用七牛云服务器对静态资源实现加速 开发环境要求JDK统一要求:JDK1.8Maven统一管理依赖 统一采用Docker环境部署编码统一采用UTF-8开发工具IDEA 或者 Eclipse 

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值