Java RabbitMQ整合SpringAMQPWord文档下载推荐.docx
- 文档编号:21136850
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:20
- 大小:21.95KB
Java RabbitMQ整合SpringAMQPWord文档下载推荐.docx
《Java RabbitMQ整合SpringAMQPWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Java RabbitMQ整合SpringAMQPWord文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
@Configuration
@ComponentScan({"
com.southeast.spring.*"
})
publicclassRabbitMQConfig{
@Bean
publicConnectionFactoryconnectionFactory(){
CachingConnectionFactoryconnectionFactory=newCachingConnectionFactory();
connectionFactory.setAddresses("
localhost"
);
connectionFactory.setUsername("
guest"
connectionFactory.setPassword("
connectionFactory.setVirtualHost("
/"
returnconnectionFactory;
}
publicRabbitAdminrabbitAdmin(ConnectionFactoryconnectionFactory){
RabbitAdminrabbitAdmin=newRabbitAdmin(connectionFactory);
rabbitAdmin.setAutoStartup(true);
returnrabbitAdmin;
}
注意:
•autoStartup必须要设置为true,否则容器不会加载RabbitAdmin
基础功能操作
importjava.util.HashMap;
importorg.junit.Test;
importorg.junit.runner.RunWith;
importorg.springframework.amqp.core.Binding;
importorg.springframework.amqp.core.BindingBuilder;
importorg.springframework.amqp.core.DirectExchange;
importorg.springframework.amqp.core.FanoutExchange;
importorg.springframework.amqp.core.Queue;
importorg.springframework.amqp.core.TopicExchange;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.boot.test.context.SpringBootTest;
importorg.springframework.test.context.junit4.SpringRunner;
/**
*<
h1>
RabbitAdmin测试<
/h1>
*/
@RunWith(SpringRunner.class)
@SpringBootTest
publicclassApplicationTests{
@Autowired
privateRabbitAdminrabbitAdmin;
/**
h2>
测试RabbitAdmin的基本基本功能<
/h2>
*@throwsException
@Test
publicvoidtestAdmin()throwsException{
//声明交换机
rabbitAdmin.declareExchange(newDirectExchange("
test.direct"
false,false));
rabbitAdmin.declareExchange(newTopicExchange("
test.topic"
rabbitAdmin.declareExchange(newFanoutExchange("
test.fanout"
//声明队列
rabbitAdmin.declareQueue(newQueue("
test.direct.queue"
false));
test.topic.queue"
test.fanout.queue"
//声明绑定:
注意有2种方式
rabbitAdmin.declareBinding(newBinding("
Binding.DestinationType.QUEUE,
"
"
direct"
newHashMap<
>
()));
rabbitAdmin.declareBinding(
BindingBuilder
.bind(newQueue("
false))//直接创建队列
.to(newTopicExchange("
false,false))//直接创建交换机建立关联关系
.with("
user.#"
));
//指定路由Key
false))
.to(newFanoutExchange("
false,false)));
//清空队列数据
rabbitAdmin.purgeQueue("
false);
RabbitAdmin源码解析
RabbitMQAdmin底层实现就是从Spring容器中获取Exchange、Binding、routingkey以及Queue的@Bean声明,然后使用RabbitTemplate的execute方法执行对应的声明、修改、删除等一系列RabbitMQ基础功能操作。
this.rabbitTemplate.execute(
newChannelCallback<
Object>
(){
publicObjectdoInRabbit(Channelchannel)throwsException{
RabbitAdmin.this.declareExchanges(channel,(Exchange[])exchanges.toArray(newExchange[exchanges.size()]));
RabbitAdmin.this.declareQueues(channel,(Queue[])queues.toArray(newQueue[queues.size()]));
RabbitAdmin.this.declareBindings(channel,(Binding[])bindings.toArray(newBinding[bindings.size()]));
returnnull;
});
SpringAMQP声明
•RabbitMQ基础API中声明一个Exchange、一个队列、一个绑定:
//声明一个交换机
channel.exchangeDeclare(exchangeName,exchangeType,true,false,false,null);
//声明一个队列
channel.queueDeclare(queueName,false,false,false,null);
//绑定:
将一个队列绑定到一个交换机上
channel.queueBind(queueName,exchangeName,routingKey);
•使用SpringAMQP去声明,使用@Bean注解
针对消费者声明交换机、队列、绑定<
*1.设置交换机类型
*2.将队列绑定到交换机
*-FanoutExchange:
将消息分发到所有的绑定队列,无routingkey的概念
*-HeadersExchange:
通过添加属性key-value匹配
*-DirectExchange:
按照routingkey分发到指定队列
*-TopicExchange:
多关键字匹配
//声明交换机、队列和绑定
@Bean
publicTopicExchangeexchange001(){
returnnewTopicExchange("
topic001"
true,false);
publicQueuequeue001(){
returnnewQueue("
queue001"
true);
//队列持久
publicBindingbinding001(){
returnBindingBuilder.bind(queue001()).to(exchange001()).with("
spring.*"
publicTopicExchangeexchange002(){
topic002"
publicQueuequeue002(){
queue002"
publicBindingbinding002(){
returnBindingBuilder.bind(queue002()).to(exchange002()).with("
rabbit.*"
publicQueuequeue003(){
queue003"
publicBindingbinding003(){
returnBindingBuilder.bind(queue003()).to(exchange001()).with("
mq.*"
publicQueuequeue_image(){
image_queue"
publicQueuequeue_pdf(){
pdf_queue"
RabbitTemplate
RabbitTemplate即消息模板,是在于SpringAMQP整合时进行发送消息的关键类,该类提供了丰富的发送消息方法,包括可靠性投递消息方法、回调监听消息接口ConfirmCallback、返回值确认接口ReturnCallback等等。
同样我们需要进行注入到Spring容器中,然后直接使用。
publicRabbitTemplaterabbitTemplate(ConnectionFactoryconnectionFactory){
RabbitTemplaterabbitTemplate=newRabbitTemplate(connectionFactory);
returnrabbitTemplate;
@Autowired
privateRabbitTemplaterabbitTemplate;
rabbitTemplate测试发送消息<
@Test
publicvoidtestSendMessage()throwsException{
//1创建消息
MessagePropertiesmessageProperties=newMessageProperties();
messageProperties.getHeaders().put("
desc"
信息描述.."
type"
自定义消息类型.."
Messagemessage=newMessage("
HelloRabbitMQ"
.getBytes(),messageProperties);
rabbitTemplate.convertAndSend("
spring.amqp"
message,newMessagePostProcessor(){
@Override
publicMessagepostProcessMessage(Messagemessage)throwsAmqpException{
System.err.println("
------添加额外的设置---------"
message.getMessageProperties().getHeaders().put("
额外修改的信息描述"
attr"
额外新加的属性"
returnmessage;
});
publicvoidtestSendMessage2()throwsException{
messageProperties.setContentType("
text/plain"
mq消息1234"
rabbitTemplate.send("
spring.abc"
message);
helloobjectmessagesend!
"
rabbit.abc"
!
SimpleMessageListenerContainer
SimpleMessageListenerContainer即简单消息监听容器。
该类非常强大,我们可以对他进行很多设置,对于消费者的配置项,这个类都可以满足。
使用SimpleMessageListenerContainer可以监听多个队列、设置消费者数量、批量消费。
设置简单消息监听容器<
*@paramconnectionFactory
*@return{@linkSimpleMessageListenerContainer}
publicSimpleMessageListenerContainermessageContainer(ConnectionFactoryconnectionFactory){
SimpleMessageListenerContainercontainer=newSimpleMessageListenerContainer(connectionFactory);
//监听多个队列
container.setQueues(queue001(),queue002(),queue003(),queue_image(),queue_pdf());
container.setConcurrentConsumers
(1);
container.setMaxConcurrentConsumers(5);
container.setDefaultRequeueRejected(false);
container.setAcknowledgeMode(AcknowledgeMode.AUTO);
container.setConsumerTagStrategy(newConsumerTagStrategy(){
publicStringcreateConsumerTag(Stringqueue){
returnqueue+"
_"
+UUID.randomUUID().toString();
//设置监听器
container.setMessageListener(newChannelAwareMessageListener(){
publicvoidonMessage(Messagemessage,Channelchannel)throwsException{
Stringmsg=newString(message.getBody());
消费者:
+msg);
returncontainer;
MessageListenerAdapter
MessageListenerAdapter即消息监听适配器,通过MessageListenerAdapter的代码我们可以看出如下核心属性:
•defaultListenerMethod:
默认监听方法名称
•Delegate委托对象:
实际真实的委托对象,用于处理消息
•queueOrTagToMathodName:
队列标识与方法名称组成的集合
可以将队列和方法名称绑定,即指定队列里的消息会被绑定的方法所接受处理
Adpater
/*container.setMessageListener(newChannelAwareMessageListener(){
*/
*defaultListenerMethod方式
/*//设置适配器,作为参数
MessageListenerAdapteradapter=newMessageListenerAdapter(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java RabbitMQ整合SpringAMQP RabbitMQ 整合 SpringAMQP