Java之RabbitMQ(二)多mq配置
场景:
springboot单项目,自身使用mq中间件处理一些业务需求,某些业务上又需要消费第三方mq消息,这时候需要我们单项目中配置多套mq,这时候,需要我们自定义多套mq相关连接工厂、模板、监听工厂、管理等流程,具体实现,参见如下:
实现:
1.配置文件:application.yml
spring:
rabbitmq:
first:
host: localhost
port: 5672
username: guest
password: guest
virtualHost: /channel-demo
second:
host: 100.100.100.184
port: 5672
username: guest
password: guest
virtualHost: /xxx-test
2.配置类:
FirstRabbitConfig配置类:
package com.xxx.channe.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.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary; /**
* <p>
* </p>
*
* @author mumu
* @since 2019/12/6
*/
@Configuration
@ConfigurationProperties("spring.rabbitmq.first")
public class FirstRabbitConfig extends AbstractRabbitConfig {
@Bean(name = "firstConnectionFactory")
@Primary
public ConnectionFactory firstConnectionFactory() {
return super.connectionFactory();
} @Bean(name = "firstRabbitTemplate")
@Primary
public RabbitTemplate rabbitTemplate(@Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory) {
return new RabbitTemplate(connectionFactory);
} @Bean(name = "firstFactory")
public SimpleRabbitListenerContainerFactory firstFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer,
@Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
configurer.configure(factory, connectionFactory);
return factory;
} @Bean(value = "firstRabbitAdmin")
public RabbitAdmin firstRabbitAdmin(@Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory) {
RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
// rabbitAdmin.declareExchange(firstDirectExchange());
// rabbitAdmin.declareQueue(firstQueue());
// rabbitAdmin.declareBinding(firstBinding());
return rabbitAdmin;
} @Bean
public DirectExchange firstDirectExchange() {
return new DirectExchange("first-direct-exchange");
} @Bean
public Queue firstQueue() {
return new Queue("first-queue");
} @Bean
public Binding firstBinding() {
return BindingBuilder.bind(firstQueue()).to(firstDirectExchange()).with("first-routing-key");
}
}
SecondRabbitConfig配置类:
package com.xxx.channe.config; import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* <p>
* </p>
*
* @author mumu
* @since 2019/12/6
*/
@Configuration
@ConfigurationProperties("spring.rabbitmq.second")
public class SecondRabbitConfig extends AbstractRabbitConfig { @Bean(name = "secondConnectionFactory")
public ConnectionFactory secondConnectionFactory() {
return super.connectionFactory();
} @Bean(name = "secondRabbitTemplate")
public RabbitTemplate secondRabbitTemplate(@Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory) {
return new RabbitTemplate(connectionFactory);
} @Bean(name = "secondFactory")
public SimpleRabbitListenerContainerFactory secondFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer,
@Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
configurer.configure(factory, connectionFactory);
return factory;
} @Bean(value = "secondRabbitAdmin")
public RabbitAdmin secondRabbitAdmin(@Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory) {
return new RabbitAdmin(connectionFactory);
} // @Bean
// public DirectExchange secondDirectExchange() {
// return new DirectExchange("second-direct-exchange");
// }
//
// @Bean
// public Queue secondQueue() {
// return new Queue("second-queue");
// }
//
// @Bean
// public Binding secondBinding() {
// return BindingBuilder.bind(secondQueue()).to(secondDirectExchange()).with("second-routing-key");
// }
}
3.生产者:
package com.xxx.channe.service.impl; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component; /**
* <p>
* </p>
*
* @author mumu
* @since 2019/12/6
*/
@Slf4j
@Component
public class MqTest { @Autowired
@Qualifier(value = "firstRabbitTemplate")
private RabbitTemplate firstRabbitTemplate;
public void send() {
firstRabbitTemplate.convertAndSend("first-direct-exchange", "first-routing-key", "我是 first。。。");
log.info("消息发送成功...");
} }
4.消费者:
package com.xxx.channe.service.impl; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component; /**
* <p>
* </p>
*
* @author mumu
* @since 2019/12/6
*/
@Slf4j
@Component
public class MqTest {@RabbitListener(queues = {"first-queue"}, containerFactory = "firstFactory")
@RabbitHandler
public void firstTest() {
System.out.println("hello, first mq收到消息");
} }
未完待续...
Java之RabbitMQ(二)多mq配置的更多相关文章
- MQ配置安装
一,MQ安装 ./mqlicense.sh -accept rpm -ivh MQSeries*.rpm -- rpm -qa|grep MQSeries 二,MQ配置 环境变量配置(MQM)实际安 ...
- Java进阶专题(二十) 消息中间件架构体系(2)-- RabbitMQ研究
前言 接上文,这个继续介绍RabbitMQ,并理解其底层原理. 介绍 RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的 ...
- RabbitMQ学习(二):Java使用RabbitMQ要点知识
转 https://blog.csdn.net/leixiaotao_java/article/details/78924863 1.maven依赖 <dependency> <g ...
- rabbit的简单搭建,java使用rabbitmq queue的简单例子和一些坑
一 整合 由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面. 附上自己的项目地址https://github.com/247292980/spring-boot 以整 ...
- (一)RabbitMQ安装与基本配置
[博主使用的环境是阿里云ecs服务器,操作系统为centos] 安装erlang环境 RabbitMQ底层是Erlang语言,因此要先安装erlang环境,就像你要运行Java程序就必须先安装JRE/ ...
- Java SE 简介 & 环境变量的配置
Java SE 简介 & 环境变量的配置 一.Java 技术的三个方向 Java 技术分为三个方向 javaSE( Java Platform Standard Edition 标准版)用来开 ...
- Java 验证码、二维码
Java 验证码.二维码 资源 需要: jelly-core-1.7.0.GA.jar网站: http://lychie.github.io/products.html将下载下来的 jelly ...
- Java并发编程二三事
Java并发编程二三事 转自我的Github 近日重新翻了一下<Java Concurrency in Practice>故以此文记之. 我觉得Java的并发可以从下面三个点去理解: * ...
- JAVA开发环境 - 环境变量及配置
JDK是什么?JRE是什么? JRE(Java Runtime Environment):Java运行环境: JDK(Java Development Kit):Java开发工具包,里面已经包含JRE ...
随机推荐
- BeautifulSoup 爬虫
一 安装BeautifulSoup 安装Python的包管理器pip 然后运行 $pip3 install beautifulsoup 在终端里导入它测试下是否安装成功 >>>fro ...
- delphi获得文件大小
大概有这些方法可以获得文件大小 FileSizeByName(需要引用IdGlobal单元) GetFileSize FileSize(不能获得正在使用的文件大小) FileSeek TFileStr ...
- delphi DrawText 的用法
DrawText(hDC: HDC; {设备句柄}lpString: PChar; {文本}nCount: Integer; {要绘制的字符个数; -1 表示全部}var lpRect: TRect; ...
- NX二次开发-UFUN更改视图比例大小UF_DRAW_set_view_scale
#include <uf.h> #include <uf_draw.h> #include <uf_drf.h> #include <uf_obj.h> ...
- 如何用DOS命令查看占用某端口的程序及PID号
果学过JSP编程的朋友可以会发现,若用Eclipse运行JSP文件时常常会弹出某某端口正在使用,从而导致代码无法运行.如何查找出特定端口的使用情况以及对应的程序呢,针对该问题,本文介绍利用DOS命令查 ...
- Lombok 常用注解
Lombok Lombok 能以简单的注解形式来简化 java 代码,提高开发人员的开发效率.例如开发中经常需要写的 javaBean,都需要花时间去添加相应的 getter/setter,也许还要去 ...
- 运行mybatis项目,运行测试类,点击test后,出现Cannot start compilation: the output path is not specified for module "前......
Cannot start compilation: the output path is not specified for module "前 后来发现是在pom.xml右击,有个+号,把 ...
- 20140425 malloc和new不同 dynamic何时返回0
1.malloc/free和new/delete区别 http://blog.csdn.net/hackbuteer1/article/details/6789164 相同点:都可用于申请动态内存和释 ...
- 随笔-ansible-4
触发器: 一个任务同时调用多个触发器: 为远程主机上的用户设置环境变量: 保存前一步命令的输出结果,并保存到foo中: 添加环境变量的另一种方式: 注意:lineinfile模块只适用于修改少量环境变 ...
- 网页开发人员收藏的16款HTML5工具
本文收集的20款优秀的 HTML5 Web 应用程序,值得添加到您的 HTML5 的工具箱中,他们能够帮助你开发前端项目更快.更容易. Initializr Initializr 是一个可以让你创建 ...