19/5/29 对于rabbitMQ ,我已经研究了几天。 之前完全的没有接触过,所以有很多的概念,很多的坑要踩
首先是安装 rabbitmq 这个就不记录了。
1、引入 Maven
<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>
2、配置 ,写配置文件
<!--步骤1、配置链接工厂-->
<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>
<!--步骤2、创建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 所用的配置,下面记录一下具体的作用。
(1、)配置链接
通过配置链接工厂从而链接到rabbitMQ
<!--步骤1、配置链接工厂-->
<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 中进行设置
<!--步骤2、创建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" />
这个就是上面提到的 回调,