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/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://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="pptv" durable="true" auto-delete="false"
        exclusive="false" name="pptv" />
    <!-- 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="pptv" key="pptv_key" />
        </rabbit:bindings>
    </rabbit:direct-exchange>
    <bean id="jsonMessageConverter" class="com.pptv.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="pptv_key" exchange="my-mq-exchange" />
        
    <!-- common configuration  end-->
    <!-- sender  start-->
    <!-- sender  可根据不同业务分为不同sender-->
    <bean id="testSender"
        class="com.pptv.msg.service.impl.AmqpMessageSenderImpl">
        <property name="amqpTemplate" ref="testTemplate" />
    </bean>
    <!-- sender中的一种,独立出来是为了发送添加错误code的信息 -->
    <bean id="errorMsgSender"
        class="com.pptv.msg.service.impl.AmqpMessageSenderImpl">
        <property name="amqpTemplate" ref="testTemplate" />
    </bean>
    <!-- sender service -->
    <bean id="testSendService"
        class="com.pptv.msg.service.sendservice.impl.TestMessageSendServiceImpl">
        <property name="messageSender" ref="testSender" />
    </bean>
    
    <!-- sender  end-->
     <!-- processor 这里可以处理响应的业务类型-->
    <bean id="testMessageProcessor" class="com.pptv.msg.process.UserMessageProcessorImpl">
    </bean>
    
    <!-- receiver  start-->
    
    <!-- listener -->
    <bean id="testMessageListener" class="com.pptv.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="pptv" ref="testMessageListener" method="onMessage" />
    </rabbit:listener-container>
    
    <!-- receiver  end-->
</beans>

因为本工程吧sender和receiver的功能都融合在一起了,所以在配置中可以看到同时有sender和receiver的单独配置,以及公共的配置。单独配置其实是一样的,只需要分成两个工程,代码和配置分开就是了。可参考以下文章:http://my.oschina.net/never/blog/140368

对类及配置的具体的、详细的描述在本文就不描写了,实在是太多了,写起来可能过于详细,但是对于开发过springMVC项目的人来说,看了源码就应该能轻松搞定的。

RabbitMQ学习及实践3--SpringMVC实现,布布扣,bubuko.com

时间: 2024-10-11 04:31:32

RabbitMQ学习及实践3--SpringMVC实现的相关文章

RabbitMQ学习及实践2---介绍及简单Java实现

一,基本概念 MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息.MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义,而MQ则是遵循了AMQP协议的具体实现和产品. RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是AMQP(高级消息队列协

RabbitMQ学习总结

原文:RabbitMQ学习总结 关于RabbitMQ是什么以及它的概念,不了解的可以先查看一下下面推荐的几篇博客 https://blog.csdn.net/whoamiyang/article/details/54954780 https://www.cnblogs.com/frankyou/p/5283539.html https://blog.csdn.net/mx472756841/article/details/50815895 官网介绍:http://www.rabbitmq.com

Google App Engine 学习和实践

这个周末玩了玩Google App Engine,随手写点东西,算是学习笔记吧.不当之处,请多多指正. 作者:liigo,2009/04/26夜,大连 原创链接:http://blog.csdn.net/liigo/archive/2009/04/26/4127055.aspx 转载请注明出处:http://blog.csdn.net/liigo 一,怎么想起来玩Google App Engine了呢? 近期想写一个小程序,以便在公司的电脑和家里的电脑之间随时共享数据.但是没有现成的server

hadoop2.5.2学习及实践笔记(四)—— namenode启动过程源码概览

对namenode启动时的相关操作及相关类有一个大体了解,后续深入研究时,再对本文进行补充 >实现类 HDFS启动脚本为$HADOOP_HOME/sbin/start-dfs.sh,查看start-dfs.sh可以看出,namenode是通过bin/hdfs命令来启动 $ vi start-dfs.sh # namenodes NAMENODES=$($HADOOP_PREFIX/bin/hdfs getconf -namenodes) echo "Starting namenodes o

linux学习与实践(4)--常用命令备忘

1.查看程序对应进程号: ps –ef|grep 进程名 2.Linux下查看端口号所使用的进程号: 使用lsof命令: lsof –i:端口号 linux学习与实践(4)--常用命令备忘,布布扣,bubuko.com

rabbitmq 学习-9- RpcClient发送消息和同步接收消息原理

rabbitmq 学习-9- RpcClient发送消息和同步接收消息原理

RabbitMQ学习系列(四): 几种Exchange 模式

上一篇,讲了RabbitMQ的具体用法,可以看看这篇文章:RabbitMQ学习系列(三): C# 如何使用 RabbitMQ.今天说些理论的东西,Exchange 的几种模式. AMQP协议中的核心思想就是生产者和消费者隔离,生产者从不直接将消息发送给队列.生产者通常不知道是否一个消息会被发送到队列中,只是将消息发送到一个交换机.先由Exchange来接收,然后Exchange按照特定的策略转发到Queue进行存储.同理,消费者也是如此.Exchange 就类似于一个交换机,转发各个消息分发到相

RabbitMQ学习之:(六)Direct Exchange (转贴+我的评论)

From: http://lostechies.com/derekgreer/2012/04/02/rabbitmq-for-windows-direct-exchanges/ RabbitMQ for Windows: Direct Exchanges Posted by Derek Greer on April 2, 2012 This is the fifth installment to the series: RabbitMQ for Windows.  In thelast inst

敏捷个人新体系学习 - 1.实践的艺术

不能简化的方法不会被容易实践,大信息量的敏捷个人缺少主线,必须简化.新体系是对敏捷个人的一次体系化的瘦身,明天晚上我们将在YY线上进行第一次新体系的学习分享,本次分享将围绕成长.优势.学习.行动.改变.实践来分享敏捷个人新体系的主线. 如果喜欢这个PPT,可以点击下载PDF版本,可以通过敏捷个人手机应用还可以在资料中下载原始PPT版本,可以看到播放动画效果,还可以学习制作PPT,还可以与更多人分享敏捷个人. 敏捷个人新体系学习 - 1.实践的艺术