spring-rabbitmq

1:简要说明

      MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消 息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求

2:使用场景

      在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。

3:简单应用

      参考:http://wubin850219.iteye.com/blog/1050328

4:spring-rabbitmq的简单配置:

  ①:生产者端

       结合springmvc

  pom文件配置:

  1 <properties>

  2         <spring.version>3.1.0.RELEASE</spring.version>

  3         <log4j.version>1.2.17</log4j.version>

  4         <junit.version>4.11</junit.version>

  5     </properties>

  6     <dependencies>

  7         <dependency>

  8             <groupId>junit</groupId>

  9             <artifactId>junit</artifactId>

 10             <version>${junit.version}</version>

 11             <scope>test</scope>

 12         </dependency>

 13         <dependency>

 14             <groupId>org.springframework</groupId>

 15             <artifactId>spring-core</artifactId>

 16             <version>${spring.version}</version>

 17         </dependency>

 18         <dependency>

 19             <groupId>org.springframework</groupId>

 20             <artifactId>spring-jdbc</artifactId>

 21             <version>${spring.version}</version>

 22         </dependency>

 23         <dependency>

 24             <groupId>org.springframework</groupId>

 25             <artifactId>spring-beans</artifactId>

 26             <version>${spring.version}</version>

 27         </dependency>

 28         <dependency>

 29             <groupId>org.springframework</groupId>

 30             <artifactId>spring-expression</artifactId>

 31             <version>${spring.version}</version>

 32         </dependency>

 33         <dependency>

 34             <groupId>org.springframework</groupId>

 35             <artifactId>spring-orm</artifactId>

 36             <version>${spring.version}</version>

 37         </dependency>

 38         <dependency>

 39             <groupId>org.springframework</groupId>

 40             <artifactId>spring-web</artifactId>

 41             <version>${spring.version}</version>

 42         </dependency>

 43         <dependency>

 44             <groupId>org.springframework</groupId>

 45             <artifactId>spring-webmvc</artifactId>

 46             <version>${spring.version}</version>

 47         </dependency>

 48         <dependency>

 49             <groupId>org.apache.geronimo.specs</groupId>

 50             <artifactId>geronimo-servlet_2.5_spec</artifactId>

 51             <version>1.2</version>

 52         </dependency>

 53         <dependency>

 54             <groupId>org.aspectj</groupId>

 55             <artifactId>aspectjrt</artifactId>

 56             <version>1.6.11</version>

 57         </dependency>

 58         <dependency>

 59             <groupId>org.aspectj</groupId>

 60             <artifactId>aspectjweaver</artifactId>

 61             <version>1.6.11</version>

 62         </dependency>

 63         <dependency>

 64             <groupId>cglib</groupId>

 65             <artifactId>cglib-nodep</artifactId>

 66             <version>3.1</version>

 67         </dependency>

 68         <!-- Shiro security -->

 69         <!-- <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> 

 70             <version>${shiro.version}</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> 

 71             <artifactId>shiro-web</artifactId> <version>${shiro.version}</version> </dependency> 

 72             <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-cas</artifactId> 

 73             <version>${shiro.version}</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> 

 74             <artifactId>shiro-spring</artifactId> <version>${shiro.version}</version> 

 75             </dependency> -->

 76         <!-- end of Shiro security -->

 77         <!-- hibernate4 -->

 78         <!-- <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> 

 79             <version>4.1.7.Final</version> <exclusions> <exclusion> <groupId>javassist</groupId> 

 80             <artifactId>javassist</artifactId> </exclusion> </exclusions> </dependency> -->

 81         <dependency>

 82             <groupId>javax.servlet</groupId>

 83             <artifactId>servlet-api</artifactId>

 84             <version>2.5</version>

 85             <scope>provided</scope>

 86         </dependency>

 87         <!-- <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> 

 88             <version>5.0.5</version> </dependency> -->

 89         <dependency>

 90             <groupId>commons-dbcp</groupId>

 91             <artifactId>commons-dbcp</artifactId>

 92             <version>1.2.2</version>

 93         </dependency>

 94         <dependency>

 95             <groupId>org.springframework.amqp</groupId>

 96             <artifactId>spring-rabbit</artifactId>

 97             <version>1.4.0.RELEASE</version>

 98         </dependency>

 99 

100         <!--json-lib-->    

101         <dependency>    

102             <groupId>net.sf.json-lib</groupId>    

103             <artifactId>json-lib</artifactId>    

104             <version>2.4</version>    

105             <classifier>jdk15</classifier>    

106         </dependency> 

107 

108     </dependencies>
View Code

    web.xml:

 1 <!--启用spring支持 -->

 2     <!-- 上下文配置文件 -->

 3     <context-param>

 4         <description>spring config</description>

 5         <param-name>contextConfigLocation</param-name>

 6         <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/springmvc-servlet.xml,/WEB-INF/applicationContext-rabbitmq.xml</param-value>

 7     </context-param>

 8     <listener>

 9         <description>spring listerner</description>

10         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

11     </listener>

12     <!-- 启用springMVC的核心控制器 -->

13     <servlet>

14         <servlet-name>springmvc</servlet-name>

15         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

16         <load-on-startup>2</load-on-startup>

17     </servlet>

18     <servlet-mapping>

19         <servlet-name>springmvc</servlet-name>

20         <url-pattern>*.do</url-pattern>

21     </servlet-mapping>
View Code

     applicationContext-rabbitmq.xml:

 1 <?xml version="1.0" encoding="UTF-8"?>

 2 <beans xmlns="http://www.springframework.org/schema/beans"

 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

 4     xmlns:context="http://www.springframework.org/schema/context"

 5     xmlns:rabbit="http://www.springframework.org/schema/rabbit"

 6     xsi:schemaLocation="http://www.springframework.org/schema/beans   

 7        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  

 8        http://www.springframework.org/schema/context    

 9        http://www.springframework.org/schema/context/spring-context-3.0.xsd

10        http://www.springframework.org/schema/rabbit

11        http://www.springframework.org/schema/rabbit/spring-rabbit-1.4.xsd">

12        

13        <!-- 配置扫瞄注解service,controller -->

14     <context:annotation-config />

15     <!-- proxy-target-class =true 表示使用cglib来实现动态代理 -->

16     <!-- <aop:aspectj-autoproxy proxy-target-class="true"/> -->

17     <context:component-scan base-package="rabbitmq" />

18       

19     <!-- <rabbit:connection-factory id="connectionFactory" />

20     <rabbit:template id="rabbitTemplate"

21         connection-factory="connectionFactory" exchange="myExchange"

22         routing-key="foo.bar" />

23 

24 

25     <rabbit:admin connection-factory="connectionFactory" />

26     <rabbit:queue name="myQueue" />

27     <rabbit:topic-exchange name="myExchange">

28         <rabbit:bindings>

29             <rabbit:binding queue="myQueue" pattern="foo.*" />

30         </rabbit:bindings>

31     </rabbit:topic-exchange>

32 

33     <rabbit:listener-container

34         connection-factory="connectionFactory">

35         <rabbit:listener ref="foo" method="listen"

36             queue-names="myQueue" />

37     </rabbit:listener-container>

38 

39     <bean id="foo" class="foo.Foo" /> -->

40     

41     <bean id="connectionFactory"  

42         class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">  

43         <constructor-arg value="localhost" />  

44         <property name="username" value="guest" />  

45         <property name="password" value="guest" />  

46     </bean>  

47     <bean id="amqpAdmin"  

48         class="org.springframework.amqp.rabbit.core.RabbitAdmin">  

49         <constructor-arg ref="connectionFactory" />  

50     </bean>  

51     <bean id="rabbitTemplate"  

52         class="org.springframework.amqp.rabbit.core.RabbitTemplate">  

53         <constructor-arg ref="connectionFactory"></constructor-arg>  

54     </bean>  

55     <bean id="messageProducer"  

56         class="rabbitmq.MessageProducer">  

57         <property name="rabbitTemplate">  

58             <ref bean="rabbitTemplate" />  

59         </property> 

60         <property name="exchangeName" value="TEST_EXCHANGE"/>

61         <property name="routeKey" value="*.test"/> 

62     </bean>

63 </beans>  
View Code

因为这里没有使用spring的事物等,所以applicationContext.xml文件可以基本不用配置

控制端(action)

package controller;



import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.servlet.ModelAndView;



import rabbitmq.MessageProducer;

import vo.Message;

import vo.User;



@RequestMapping("/login")

@Controller

public class LoginController {

    

    @Autowired

    private MessageProducer messageProducer;

    

    @RequestMapping("login.do")

    public String login(User currUser) {

        ModelAndView view =new ModelAndView();

        view.addObject("user", currUser);

        view.setViewName("index");

        Message message = new Message();

        message.setContext(currUser);

        messageProducer.sendMessage(message);

        return "index";

    }

    

    @RequestMapping("index.do")

    public String index(){

        return "login";

    }

}
View Code

这样就可以在登录的时候,向指定的队列中发送登录者的信息了。接收端接受消息就不写了

 

你可能感兴趣的:(rabbitmq)