javascript
RabbitMQ学习及实践3--SpringMVC实现
????根據學習的RabbitMQ知識配了一個SpringMVC的實現。這是一個完整的工程,view的部分使用freeMarker,持久化操作是通過mybatis實現。
????整個工程的目錄結構如下:
src下的相關包的解釋:
????controller:控制器;
????domain:對應數據庫的操作對象類;
????persistence:mybatis的持久化操作;
????util:相關工具類;
????msg.bean:消息類,定義及描述消息體;
????msg.convert:實現如何轉化消息體為可接受的消息類;
????msg.process:處理器,負責接受到消息后如何處理;
????msg.service:包括sender及listener的實現,用于完成發送和接受消息。
config目錄存儲相關配置文件。
1、配置
????web.xml配置,主要配置spring及spring mvc:
????<display-name>springRabbit</display-name><!--?Spring?容器加載的配置文件?設置?--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext*.xml</param-value></context-param><context-param><param-name>log4jConfigLocation</param-name><param-value>classpath:log4j.properties</param-value></context-param><!--Spring默認刷新Log4j配置文件的間隔,單位為millisecond?--><context-param><param-name>log4jRefreshInterval</param-name><param-value>60000</param-value></context-param><!--?Spring?配置?--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener><!--?Spring?MVC?配置?--><servlet><servlet-name>springDispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath*:/applicationContext-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springDispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>對于springMVC的配置這里不再贅述,本文主要描述的是RabbitMQ的配置,故此處只詳細描述RabbitMQ的配置:
applicationContext-mq.xml配置:
<?xml?version="1.0"?encoding="UTF-8"?> <beans?xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?xmlns:context="http://www.springframework.org/schema/context"xmlns:rabbit="http://www.springframework.org/schema/rabbit"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/rabbit????????????????http://www.springframework.org/schema/rabbit/spring-rabbit-1.2.xsd"><!--?common?configuration??start--><!--?連接服務配置??--><rabbit:connection-factory?id="connectionFactory"host="localhost"?username="guest"?password="guest"?port="5672"?/><rabbit:admin?connection-factory="connectionFactory"?/><!--?queue?隊列聲明--><rabbit:queue?id="neilyan"?durable="true"?auto-delete="false"exclusive="false"?name="neilyan"?/><!--?exchange?queue?binging?key?綁定?--><rabbit:direct-exchange?name="my-mq-exchange"durable="true"?auto-delete="false"?id="my-mq-exchange"><rabbit:bindings><rabbit:binding?queue="neilyan"?key="neilyan_key"?/></rabbit:bindings></rabbit:direct-exchange><bean?id="jsonMessageConverter"?class="com.neilyan.msg.convert.JsonMessageConverter"></bean><!--?spring?template聲明--><rabbit:template?exchange="my-mq-exchange"?id="amqpTemplate"connection-factory="connectionFactory"?message-converter="jsonMessageConverter"?/><!--?amqp?template?可根據不同業務分為不同template--><rabbit:template?id="testTemplate"?connection-factory="connectionFactory"message-converter="jsonMessageConverter"?reply-timeout="2000"routing-key="neilyan_key"?exchange="my-mq-exchange"?/><!--?common?configuration??end--><!--?sender??start--><!--?sender??可根據不同業務分為不同sender--><bean?id="testSender"class="com.neilyan.msg.service.impl.AmqpMessageSenderImpl"><property?name="amqpTemplate"?ref="testTemplate"?/></bean><!--?sender中的一種,獨立出來是為了發送添加錯誤code的信息?--><bean?id="errorMsgSender"class="com.neilyan.msg.service.impl.AmqpMessageSenderImpl"><property?name="amqpTemplate"?ref="testTemplate"?/></bean><!--?sender?service?--><bean?id="testSendService"class="com.neilyan.msg.service.sendservice.impl.TestMessageSendServiceImpl"><property?name="messageSender"?ref="testSender"?/></bean><!--?sender??end--><!--?processor?這里可以處理響應的業務類型--><bean?id="testMessageProcessor"?class="com.neilyan.msg.process.UserMessageProcessorImpl"></bean><!--?receiver??start--><!--?listener?--><bean?id="testMessageListener"?class="com.neilyan.msg.service.impl.AmqpMessageListenerImpl"><property?name="messageProcessor"?ref="testMessageProcessor"?/><property?name="messageConverter"?ref="jsonMessageConverter"?/><property?name="errorMsgSender"?ref="errorMsgSender"?/></bean><!--?queue?litener??觀察?監聽模式?當有消息到達時會通知監聽在對應的隊列上的監聽對象--><rabbit:listener-container?connection-factory="connectionFactory"?concurrency="2"?channel-transacted="false"?acknowledge="auto"><rabbit:listener?queues="neilyan"?ref="testMessageListener"?method="onMessage"?/></rabbit:listener-container><!--?receiver??end--> </beans>因為本工程吧sender和receiver的功能都融合在一起了,所以在配置中可以看到同時有sender和receiver的單獨配置,以及公共的配置。單獨配置其實是一樣的,只需要分成兩個工程,代碼和配置分開就是了。可參考以下文章:http://my.oschina.net/never/blog/140368
對類及配置的具體的、詳細的描述在本文就不描寫了,實在是太多了,寫起來可能過于詳細,但是對于開發過springMVC項目的人來說,看了源碼就應該能輕松搞定的。
本來想上傳源碼的,但是本博客系統只能接受2M以下的附件。那就把源碼上傳到我的資料里了!
轉載于:https://blog.51cto.com/flyingsnail/1431718
總結
以上是生活随笔為你收集整理的RabbitMQ学习及实践3--SpringMVC实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: express-partials与exp
- 下一篇: oracle中schema指的是什么?