# Spring-rabbitMQ **Repository Path**: HanxXaoBu/Spring-rabbitMQ ## Basic Information - **Project Name**: Spring-rabbitMQ - **Description**: Spring整合消息队列RabbitMQ - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 474 - **Created**: 2023-02-21 - **Last Updated**: 2023-02-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 本人已经实践完成,介绍下具体的步骤 ## @_@并且补充一些遇到的坑 (T. T) ## 先上一个我成功图片 -.- 首先感谢作者精细整理,此次让我学习到了东西。 ![](https://s2.ax1x.com/2020/02/14/1XHJds.png) ### 接下来讲述下我的操作步骤 !!! ### 1.自己需要安装rabbitMQ +erlang (erlang注意这是一个坑版本很重要) ![安装包](https://s2.ax1x.com/2020/02/14/1XTqHA.png) 具体的安装步骤,自己百度咯! 我是windows版本的 这部分跳过。 #### 启动MQ (启动时候需要无效,请用管理员权限这是一个坑) net start rabbitmq-server 如果无效,请使用管理员权限 启动完成后使用 用户guest 密码一样 登录 。 如下图所示 ![rabbitmq.png](https://s2.ax1x.com/2020/02/14/1XTuTI.png) 新增一个用户名,guest 这个用户实际是没有权限 (这里是一个坑) 点击Admin添加个用户 赋予administrators权限 ![rabbitmq.png](https://s2.ax1x.com/2020/02/14/1XThh6.png) 目前这个时候 MQ服务端完成 ### 2.git下载代码后用IDEA打开,注意对应的JAR下载完成后 #### 打开Rabbitconfig这个类(需要修改地址和用户名密码 这里是一个坑) ![config](https://s2.ax1x.com/2020/02/14/1X7RKg.png) 修改自己rabbit 服务端和用户名称 很关键 我的客户端发现存在乱码,可以修改成GBK。[这里就不当杠精了] ### 3.配置TOMCAT,添加WAR、 我看了评论有人不知道怎么启动项目。。。 这是springmvc web 我觉得都可以猜到 具体操作就不细讲了这步大家都会,我只截图配置信息 ![](https://s2.ax1x.com/2020/02/14/1XbqHJ.png) 打开Deployment 把 WAR添加进来 然后应用 ![](https://s2.ax1x.com/2020/02/14/1Xqwb4.png) 接下来直接启动项目就可以了!! ### 4.关键性代码,个人理解 PublisherImpl.java 文件 三种模式实现 前端传入action层 mail对象存入队列中,然后监听解析出来 ``` @Service("publisher") public class PublisherImpl implements Publisher { @Autowired RabbitTemplate rabbitTemplate; /** * 订阅模式 fanout routingkey 为空则全部通知 * * @param mail 邮件对象实体类 */ public void publishMail(Mail mail) { rabbitTemplate.convertAndSend("fanout", "", mail); } /** * 直连模式 direct (全KEY匹配) * * @param mail 邮件对象实体类 * @param routingkey 绑定的KEY */ public void senddirectMail(Mail mail, String routingkey) { rabbitTemplate.convertAndSend("direct", routingkey, mail); } /** * topic交换机模 (KEY模糊搜索匹配) * * @param mail 邮件对象实体类 * @param routingkey 绑定的KEY */ public void sendtopicMail(Mail mail, String routingkey) { rabbitTemplate.convertAndSend("mytopic", routingkey, mail); } } } ``` ``` 交换机路由功能 KEY 是一个关键。。。一个队列可以被多个KEY绑定。 消费者直接连接的是队列名称不是KEY ,生产者可以用交换机路由(KEY)分发不同的队列 //fanoutExchange 广播交换机 binding @Bean public Binding binding1(){ Binding binding=BindingBuilder.bind(myQueue1()).to(fanoutExchange()); return binding; } // topicExchange 3个binding将交换机和相应队列连起来 @Bean public Binding bindingtopic1(){ Binding binding=BindingBuilder.bind(topicQueue1()).to(topicExchange()).with("*.orange.*");//binding key return binding; } // directExchange 直连 @Bean public Binding bindingorange(){ Binding binding=BindingBuilder.bind(directQueue1()).to(directExchange()).with("orange"); return binding; } ```