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" />
這個就是上面提到的 回調,