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上的資源了,且可以進行讀寫操作