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>
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>
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>
由於這裏沒有使用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";
}
}
這樣就能夠在登陸的時候,向指定的隊列中發送登陸者的信息了。接收端接受消息就不寫了