rabbitmq相關

1,rabbitMq支持持久化,如果rabbitMq服務器掛了,消息也不會丟失,當隊列重啓,都恢復了。
2,rabbitMq中幾個重要的概念:虛擬主機(virtual host)、交換機(exchange)、隊列(queue)、綁定(binding)
一個交換機持有一組交換機、隊列和綁定;exchange上有路由表,這樣才知道消息要放到哪個隊列裏,這個
路由表就是通過binding來設置的;
每一個消息都有一個稱爲路由鍵(routing key)的屬性,路由表會根據消息中指定的路由鍵將消息放到
指定的隊列中,其中會有一個模式匹配的規則:*與#,符號“#”匹配一個或多個詞,符號“*”匹配不多不少一個詞
綁定的作用是將發送消息的交換機與接受消息的隊列進行連接。
3,mq服務器的相關說明,
mq運行產生的日誌:一般在mq的安裝目錄/sbin/rabbitmq-defaults文件中會指定:
LOG_BASE=${SYS_PREFIX}/var/log/rabbitmq
設置mq中的用戶、權限、交換機、綁定等使用./rabbitmqctl ...命令進行設置。

可參考一下這個博文:http://www.cnblogs.com/daizhj/archive/2010/10/21/1857374.html


springmvc中使用rabbitMq:

<!--首先指定一個連接工廠,指定地址(IP,PORT)、名稱、密碼與虛擬主機名,後面幾種是在mq服務器上進行配置的-->
<rabbit:connection-factory id="connectionFactory_stock" addresses="rabbit100.gzb.local:5672,rabbit102.gzb.local:5672,rabbit106.gzb.local:5672" 
	username="test" password="test" virtual-host="/stock"/>
    <rabbit:admin connection-factory="connectionFactory_stock" />
	
	    <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">          
	    <!-- 核心線程數,默認爲1 -->          
	    <property name="corePoolSize" value="10" />          
	    <!-- 最大線程數,默認爲Integer.MAX_VALUE -->          
	    <property name="maxPoolSize" value="50" />          
	    <!-- 隊列最大長度,一般需要設置值>=notifyScheduledMainExecutor.maxNum;默認爲Integer.MAX_VALUE -->          
	    <property name="queueCapacity" value="1000" />          
	    <!-- 線程池維護線程所允許的空閒時間,默認爲60s -->          
	    <property name="keepAliveSeconds" value="300" />          
	    <!-- 線程池對拒絕任務(無線程可用)的處理策略,目前只支持AbortPolicy、CallerRunsPolicy;默認爲後者 -->          
	    <property name="rejectedExecutionHandler">          
	        <!-- AbortPolicy:直接拋出java.util.concurrent.RejectedExecutionException異常 -->          
	        <!-- CallerRunsPolicy:主線程直接執行該任務,執行完之後嘗試添加下一個任務到線程池中,可以有效降低向線程池內添加任務的速度 -->          
	        <!-- DiscardOldestPolicy:拋棄舊的任務、暫不支持;會導致被丟棄的任務無法再次被執行 -->          
	        <!-- DiscardPolicy:拋棄當前任務、暫不支持;會導致被丟棄的任務無法再次被執行 -->          
	        <bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" />          
	    </property>          
	</bean>
	
	
	<rabbit:queue id="stock_settlement_exchange_queue" durable="true" auto-delete="false" exclusive="false" name="stock_settlement_exchange_queue"/>
    
    <!-- exchange queue binging key 綁定 -->
    <rabbit:topic-exchange name="stock_settlement_exchange" durable="true" auto-delete="false" id="stock_settlement_exchange">
		<rabbit:bindings>
			<rabbit:binding queue="stock_settlement_exchange_queue" pattern="stocktrade.settlement.*" />
		</rabbit:bindings>
	</rabbit:topic-exchange>
	<!-- 默認消息處理類,可以重寫 -->
	<bean id="incomeMessageHandler" class="com.jrj.rabbitmq.message.MessageHandler"></bean>
	
	<!-- 用於消息的監聽的代理類MessageListenerAdapter -->  
    <bean id="messageQueueListenerAdapter_stock"  
        class="org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter">  
        <constructor-arg ref="incomeMessageHandler" />  
        <property name="defaultListenerMethod" value="handleMessage"></property>  
        <property name="messageConverter" ref="messageConverter_stock"/> 
    </bean> 
    
    <bean id="messageConverter_stock" class="org.springframework.amqp.support.converter.SimpleMessageConverter"/>
	
	<!-- 監聽容器 -->
	<rabbit:listener-container
		connection-factory="connectionFactory_stock" acknowledge="auto" task-executor="taskExecutor">
		<rabbit:listener queues="stock_settlement_exchange_queue" ref="messageQueueListenerAdapter_stock" />
	</rabbit:listener-container>

rabbitmq的使用:
大致分三步:
1,設置vitual host,默認爲'/'
rabbitmqctl add_vhosts test_v
2,新建賬號,有一個默認的'guest'
rabbitmqctl add_user test 123456
3,給新建的賬號分配訪問權限:
rabbitmqctl set_permission -p test_v test "test_*" ".*" ".*"
這樣test就可以訪問虛擬主機爲test_v上的資源了,且可以進行讀寫操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章