spring-rabbitmq

1:簡要說明java

      MQ全稱爲Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通訊方法。應用程序經過讀寫出入隊列的消息(針對應用程序的數據)來通訊,而無需專用鏈接來連接它們。消 息傳遞指的是程序之間經過在消息中發送數據進行通訊,而不是經過直接調用彼此來通訊,直接調用一般是用於諸如遠程過程調用的技術。排隊指的是應用程序經過 隊列來通訊。隊列的使用除去了接收和發送應用程序同時執行的要求node

2:使用場景mysql

      在項目中,將一些無需即時返回且耗時的操做提取出來,進行了異步處理,而這種異步處理的方式大大的節省了服務器的請求響應時間,從而提升了系統的吞吐量。web

3:簡單應用spring

      參考:http://wubin850219.iteye.com/blog/1050328sql

4:spring-rabbitmq的簡單配置:express

  ①:生產者端apache

       結合springmvcjson

  pom文件配置:api

  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

這樣就能夠在登陸的時候,向指定的隊列中發送登陸者的信息了。接收端接受消息就不寫了

相關文章
相關標籤/搜索