19/5/29 对于rabbitMQ ,我已经研究了几天。 以前彻底的没有接触过,因此有不少的概念,不少的坑要踩html
首先是安装 rabbitmq 这个就不记录了。java
一、引入 Mavenweb
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-amqp</artifactId>
<version>2.0.3.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.amqp/spring-rabbit -->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>2.0.3.RELEASE</version>
</dependency>
二、配置 ,写配置文件
<!--步骤一、配置连接工厂-->
<bean id="connectionFactory" class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
<property name="host" value="${mq.address}"/>
<property name="port" value="${mq.port}"/>
<property name="password" value="${mq.pwd}"/>
<property name="username" value="${mq.user}"/>
<property name="publisherConfirms" value="true"/>
<property name="publisherReturns" value="true"/>
<property name="virtualHost" value="${mq.vhost}"/>
<property name="requestedHeartBeat" value="50"/>
</bean>
<!--步骤二、建立rabbitTemplate 消息模板-->
<bean id="rabbitTemplate" class="org.springframework.amqp.rabbit.core.RabbitTemplate">
<!--构造方法须要连接信息-->
<constructor-arg ref="connectionFactory"/>
<!--配置交换机-->
<property name="exchange" value="${mq.exchange}"/>
<!--配置路由键-->
<property name="routingKey" value="${mq.routingKey}"/>
<!--配置队列-->
<property name="queue" value="${mq.queue}"/>
<!--配置消息转换-->
<property name="messageConverter" ref="serializerMessageConverter"/>
<property name="confirmCallback" ref="rabbitTemplateConfig" />
<property name="returnCallback" ref="rabbitTemplateConfig" />
<property name="mandatory" value="true" />
</bean>
<bean id="rabbitTemplateConfig" class="mq.RabbitTemplateConfig"/>
<!--注入消息转换器-->
<bean id="serializerMessageConverter" class="org.springframework.amqp.support.converter.SimpleMessageConverter"/>
<!--引入元素文件-->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="properties">
<bean class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:conf/value.properties</value>
</list>
</property>
<property name="fileEncoding" value="UTF-8"/>
</bean>
</property>
</bean>
<!--申明消费者-->
<bean id="rmqConsumer" class="mq.RmqConsumer" />
<bean id="messageListenerAdapter" class="org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter">
<constructor-arg ref="rmqConsumer" />
<property name="defaultListenerMethod" value="rmqConsumeMessage"/>
<property name="messageConverter" ref="serializerMessageConverter"/>
</bean>
<!--注册监听-->
<bean id="listener" class="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="queueNames" value="ceshiQueues,ceshi1,ceshi2"/>
<property name="messageListener" ref="messageListenerAdapter"/>
<property name="acknowledgeMode" value="MANUAL"/>
</bean>
这个是我关于rabbitMQ 所用的配置,下面记录一下具体的做用。
(一、)配置连接
经过配置连接工厂从而连接到rabbitMQ
<!--步骤一、配置连接工厂-->
<bean id="connectionFactory" class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
<property name="host" value="${mq.address}"/>//连接的地址 127.0.0.1
<property name="port" value="${mq.port}"/>//端口号 5627
<property name="password" value="${mq.pwd}"/> //密码
<property name="username" value="${mq.user}"/> //用户名
<property name="publisherConfirms" value="true"/> //是否开启提交到交换机的回调
<property name="publisherReturns" value="true"/> //是否开启发送到队列的错误回调
<property name="virtualHost" value="${mq.vhost}"/>// 虚拟机
<property name="requestedHeartBeat" value="50"/>//心跳时间(这个可删除,我不知道有什么用,之后有领悟再记录)
</bean>
属性文件中的内容
mq.address=127.0.0.1
mq.exchange=ceshi
mq.routingKey=ceshiRouting
mq.queue=ceshiQueues
mq.port=5672
mq.user=***
mq.pwd=t**an****
mq.timeout=5000
mq.vhost=testMQ
关于开启 Confirm 与 Return 的回调 还须要在模板 rabbitTemplate 中进行设置
<!--步骤二、建立rabbitTemplate 消息模板-->
<bean id="rabbitTemplate" class="org.springframework.amqp.rabbit.core.RabbitTemplate">
<!--构造方法须要连接信息-->
<constructor-arg ref="connectionFactory"/>
<!--配置交换机-->
<property name="exchange" value="${mq.exchange}"/>
<!--配置路由键-->
<property name="routingKey" value="${mq.routingKey}"/>
<!--配置队列-->
<property name="queue" value="${mq.queue}"/>
<!--配置消息转换-->
<property name="messageConverter" ref="serializerMessageConverter"/>
<property name="confirmCallback" ref="rabbitTemplateConfig" />
<property name="returnCallback" ref="rabbitTemplateConfig" />
<property name="mandatory" value="true" />
</bean>
注册模板类的bean 类 org.springframework.amqp.rabbit.core.RabbitTemplate
在其构造方法中传入连接工厂的引用, 如上 代码 重点看 下面这几行配置
<property name="confirmCallback" ref="rabbitTemplateConfig" />
<property name="returnCallback" ref="rabbitTemplateConfig" />
<property name="mandatory" value="true" />
这个就是上面提到的 回调,