1. 程式人生 > >java mq 配置方式

java mq 配置方式

最近用到mq,需要配置一些引數,開始時xml配置方式的,用的jar包是spring-rabbit 1.4.5.RELEASE,配置檔案如下:

	<bean id="pushHandler" class="具體實現類路徑/com.test"/>
	<!-- 宣告Queue並設定Queue的名稱 -->
	<bean id="devicePropertyQueue" class="org.springframework.amqp.core.Queue">
		<constructor-arg name="name" value="devicePropertyQueue" />
		<constructor-arg name="durable" value="true" />
		<constructor-arg name="exclusive" value="false" />
		<constructor-arg name="autoDelete" value="false" />
	</bean>
	
	<!-- 宣告Exchange的型別為direct並設定Exchange的名稱 -->
	<bean id="deviceProperty.direct" class="org.springframework.amqp.core.DirectExchange">
		<constructor-arg value="deviceProperty.direct"></constructor-arg>
	</bean>
	
	<!-- Topic型別交換機通過模式匹配分配訊息的routing-key屬性。將路由鍵和某個模式進行匹配,此時佇列需要繫結到一個模式上。 它將routing-key和binding-key的字串切分成單詞。這些單詞之間用點隔開。它同樣也會識別兩個萬用字元:符號“#”和符號“*”。 
		#匹配0個或多個單詞,*匹配不多不少一個單詞。 例如,binding key:*.stock.#匹配routing key: usd.stock和eur.stock.db,但是不匹配stock.nana。 
		例如,“audit.#”能夠匹配到“audit.irs.corporate”,但是“audit.*”只會匹配到“audit.irs”。 如果沒有佇列繫結在交換機上,則傳送到該交換機上的訊息會丟失。 
		一個交換機可以繫結多個佇列,一個佇列可以被多個交換機繫結。 永續性:如果啟用,交換機將會在server重啟前都有效。 自動刪除:如果啟用,那麼交換機將會在其繫結的佇列都被刪掉之後刪除自身。 
		惰性:如果沒有宣告交換機,那麼在執行到使用的時候會導致異常,並不會主動宣告。 -->
	<!-- 通過Binding來判定Queue、Exchange、routingKey -->
	<!-- 其中構建Binding的引數1是Queue,引數2是Exchange,引數3是routingKey -->
	<bean id="devicePropertyQueueBind" class="org.springframework.amqp.core.Binding">
		<constructor-arg name="destination" value="devicePropertyQueue" />
		<constructor-arg name="destinationType" value="QUEUE" />
		<constructor-arg name="exchange" value="deviceProperty.direct" />
		<constructor-arg name="routingKey" value="push_device_property" />
		<constructor-arg name="arguments">
			<null />
		</constructor-arg>
	</bean>

	<!-- 用於訊息的監聽的代理類MessageListenerAdapter -->
	<bean id="myDevicePropertyListenerAdapter"
		class="org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter">
		<constructor-arg ref="pushHandler" />
		<property name="defaultListenerMethod" value="handleMessage"></property>
		<property name="messageConverter" ref="messageConverter"></property>
	</bean>
	<!-- 用於訊息的監聽的容器類SimpleMessageListenerContainer,對於queueName的值一定要與定義的Queue的值相同 -->
	<bean id="devicePropertyListenerContainer"
		class="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer">
		<property name="queueNames">
			<array>
				<value>devicePropertyQueue</value>
			</array>
		</property>
		<property name="connectionFactory" ref="connectionFactory"></property>
		<property name="messageListener" ref="myDevicePropertyListenerAdapter"></property>
		<property name="concurrentConsumers" value="50"></property>
		<property name="prefetchCount" value="200"></property>
	</bean>

感覺方式太low了,xml檔案就是繁瑣,後面改了一下,用spring-rabbit 2.0.5.RELEASE以上的版本,配置方式

配置檔案如下:

mq.queue = push_device_property1
mq.exchange = deviceProperty.direct1
mq.routingkey = push_device_property1
mq.durable = true
mq.exclusive = false
mq.autoDelete = false

java裡面配置如下:

    @RabbitListener(bindings = {
            @QueueBinding(value = @Queue(value = "${mq.queue}", durable = "${mq.durable}", autoDelete = "${mq.autoDelete}", exclusive = "${mq.exclusive}"),
                    exchange = @Exchange(name = "${mq.exchange}"), key = "${mq.routingkey}")})
    @RabbitHandler