자세 한 자바 메시지 큐-Spring 통합 ActiveMq
먼저 여러분 과 함께 자바 메시지 서 비 스 를 돌 이 켜 보 겠 습 니 다.제 이전 블 로그 인 에서 저 는 여러분 을 위해 분석 하 였 습 니 다.
1.메시지 서비스:하나의 미들웨어 는 두 개의 여러 프로그램 간 의 결합 을 해결 하 는 데 사용 되 고 바 텀 은 자바 에 의 해 이 루어 집 니 다.
2.우세:비동기,신뢰성
3.메시지 모델:점 대 점,게시/구독
4.JMS 의 대상
그리고 다른 블 로그 인 에서 여러분 과 함께 0 에서 1 까지 ActiveMq 프로젝트 를 열 었 습 니 다.프로젝트 개발 과정 에서 우 리 는 ActiveMq 에 대해 어느 정도 알 게 되 었 습 니 다.
1.다양한 언어 와 프로 토 콜 로 클 라 이언 트 를 작성 합 니 다.언어:Java,C,C++,C\#,Ruby,Perl,Python,PHP.응용 프로 토 콜:OpenWire,Stomp REST,WS 알림,XMPP,AMQP
2.JMS 1.1 과 J2EE 1.4 규범(지구 화,XA 메시지,사무)을 완전히 지원 합 니 다.
3.Spring 에 대한 지원,ActiveMQ 는 Spring 을 사용 하 는 시스템 에 쉽게 내장 할 수 있 으 며,Spring 2.0 의 특성 도 지원 합 니 다.
4.일반적인 J2EE 서버(예 를 들 어 Geronimo,JBoss 4,GlassFish,WebLogic)의 테스트 를 통 과 했 습 니 다.그 중에서 JCA 1.5 resource adaptors 의 설정 을 통 해 ActiveMQ 는 모든 호 환 J2EE 1.4 비 즈 니스 서버 에 자동 으로 배치 할 수 있 습 니 다.
5.다양한 전송 프로 토 콜 지원:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
6.JDBC 와 journal 을 통 해 고속 정 보 를 지속 적 으로 제공 할 수 있 습 니 다.
7.디자인 적 으로 고성능 의 클 라 이언 트,클 라 이언 트-서버,점 대 점 을 확보
8.Ajax 지원
9.Axis 와 의 통합 지원
10.내 장 된 JMS provider 를 쉽게 호출 하여 테스트 할 수 있 습 니 다.
다음 블 로그 에서 저 는 여러분 과 함께 Spring 과 ActiveMq 를 통합 하 겠 습 니 다.이 블 로 그 는 Spring+JMS+ActiveMQ+Tomcat 를 바탕 으로 Point-to-Point 의 비동기 대기 열 메시지 와 PUB/SUB(게시/구독)모델 을 실 현 했 습 니 다.간단 한 인 스 턴 스 는 어떠한 업무 도 포함 하지 않 습 니 다.
2.디 렉 터 리 구조
2.1 프로젝트 디 렉 터 리
IDE 는 IDEA(사용 권장)를 선 택 했 습 니 다.jar 를 다운로드 하 는 여러 가지 번 거 로 움 을 피하 기 위해 바 텀 에서 maven 을 사용 하여 프로젝트 를 만 들 었 습 니 다.Spring 과 ActiveMq 를 통합 시 켰 습 니 다.
2.2 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Crawl-Page</groupId>
<artifactId>Crawl-Page</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>Crawl-Page Maven Webapp</name>
<url>http://maven.apache.org</url>
<!-- -->
<properties>
<springframework>4.1.8.RELEASE</springframework>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<!-- JSP -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
<version>2.5</version>
</dependency>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springframework}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${springframework}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springframework}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springframework}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${springframework}</version>
</dependency>
<!-- xbean <amq:connectionFactory /> -->
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-spring</artifactId>
<version>3.16</version>
</dependency>
<!-- activemq -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>5.7.0</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>5.12.1</version>
</dependency>
<!-- jar , -->
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
</dependencies>
<build>
<finalName>Crawl-Page</finalName>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
여기 pom.xml 파일 이 좀 길 어서 펼 치지 않 습 니 다.1,Spring 핵심 의존 2,ActiveMq core 와 pool(여기 서 학생 들 이 jar 를 가 져 오 기 를 선택 하면 이전 블 로그 에서 말 한 activemq-all 이라는 jar 가방 을 직접 가 져 올 수 있 습 니 다)3,자바 servlet 관련 의존 도 를 볼 수 있 습 니 다.
여기 서 우리 가 선택 한 ActiveMq pool 의 의존 버 전 은 다음 dtd 와 관계 가 있 으 므 로 버 전이 대응 해 야 하기 때문에 학생 들 이 activemq 파일 을 설정 할 때 dtd 버 전 선택 에 주의해 야 합 니 다.
2.3 web.xml
웹.xml 도 대동소이 합 니 다.Spring 프로필,springMvc 이름,인 코딩 형식 을 지정 합 니 다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Archetype Created Web Application</display-name>
<!-- spring , hibernate、jms -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext*.xml;
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
2.4 SpringMvc 와 applicationContext.xml이 안의 SpringMVC 는 별 다른 것 이 없 으 니 필요 한 학생 이 있 으 면 참고 하 세 요.
<?xml version="1.0" encoding="UTF-8"?>
<!-- schemaLocation http://www.springframework.org/schema/ -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<!-- MVC -->
<mvc:annotation-driven />
<!-- Sping -->
<context:component-scan base-package="com.Jayce" >
<!-- Controller, Service -->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- JSP -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
<!-- order 1 -->
<property name="order" value="1" />
</bean>
</beans>
applicationContext.xml 는 주로 Bean 을 불 러 오 는 데 사 용 됩 니 다.저희 프로젝트 에는 특별한 자바 Bean 이 없 기 때문에 가방 스 캔 경 로 를 가리 키 는 데 만 사 용 됩 니 다.
<?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:amq="http://activemq.apache.org/schema/core"
xmlns:jms="http://www.springframework.org/schema/jms"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms-4.1.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core-5.14.3.xsd">
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
<!-- -->
<context:component-scan base-package="com.Jayce">
<!-- Service, Repostory, Controller ,Controller spring-mvc.xml -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
</beans>
2.5 applicationContext-ActiveMQ.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:amq="http://activemq.apache.org/schema/core"
xmlns:jms="http://www.springframework.org/schema/jms"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms-4.1.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core-5.12.1.xsd"
>
<context:component-scan base-package="com.Jayce" />
<mvc:annotation-driven />
<amq:connectionFactory id="amqConnectionFactory"
brokerURL="tcp://192.168.148.128:61616"
userName="admin"
password="admin" />
<!-- JMS -->
<bean id="connectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<constructor-arg ref="amqConnectionFactory" />
<property name="sessionCacheSize" value="100" />
</bean>
<!-- (Queue) -->
<bean id="demoQueueDestination" class="org.apache.activemq.command.ActiveMQQueue">
<!-- -->
<constructor-arg>
<value>Jaycekon</value>
</constructor-arg>
</bean>
<!-- JMS (Queue),Spring JMS , 、 。 -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory" />
<property name="defaultDestination" ref="demoQueueDestination" />
<property name="receiveTimeout" value="10000" />
<!-- true topic,false queue, false, false -->
<property name="pubSubDomain" value="false" />
</bean>
<!-- (Queue) -->
<bean id="queueMessageListener" class="com.Jayce.Filter.QueueMessageListener" />
<!-- (Queue), , demoQueueDestination, -->
<bean id="queueListenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destination" ref="demoQueueDestination" />
<property name="messageListener" ref="queueMessageListener" />
</bean>
</beans>
이 프로필 에 대해 설명 하 겠 습 니 다.위 프로필 에서 알 아 볼 수 있다 면 건 너 뛸 수 있 습 니 다.학생 들 도 액 티 브 MQ 홈 페이지 에서 볼 수 있다.1.ActiveMq 의 DTD.관련 설정 을 설명 하기 전에 ActiveMq 의 DTD 를 가 져 와 야 합 니 다.그렇지 않 으 면 Spring 은 우리 의 태그 가 무슨 뜻 인지 이해 하지 못 합 니 다.
pom.xml 파일 에 activemq 버 전이 설정 되 어 있 습 니 다.의존 하 는 버 전과 같 아야 합 니 다.그렇지 않 으 면 관련 dtd 를 찾 을 수 없습니다.
2.amq:connection Factory:매우 솔직 한 설정 항목 입 니 다.공장 을 연결 하 는 주소 와 사용자 이름 비밀 번 호 를 설정 하 는 데 사 용 됩 니 다.http 연결 이 아 닌 tcp 연결 을 선택 하 는 것 이 중요 합 니 다.
3.jmsTemplate:비교적 중요 한 설정 입 니 다.여 기 는 공장 을 연결 하고 기본 메 시 지 를 목적지 로 보 내 며 연결 시간 이 길 고 메 시 지 를 발표 하 는 방식 을 지정 합 니 다.
3.프로젝트 구조
3.1 ProducerService
package com.Jayce.Service;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
/**
* Created by Administrator on 2017/1/5.
*/
@Service
public class ProducerService {
@Resource(name="jmsTemplate")
private JmsTemplate jmsTemplate;
public void sendMessage(Destination destination,final String msg){
System.out.println(Thread.currentThread().getName()+" "+destination.toString()+" ---------------------->"+msg);
jmsTemplate.send(destination, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(msg);
}
});
}
public void sendMessage(final String msg){
String destination = jmsTemplate.getDefaultDestinationName();
System.out.println(Thread.currentThread().getName()+" "+destination+" ---------------------->"+msg);
jmsTemplate.send(new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(msg);
}
});
}
}
메시지 생산 자 를 서비스 로 만 듭 니 다.메 시 지 를 보 내야 할 때 ProducerService 인 스 턴 스 의 sendmessage 방법 을 사용 하면 기본 목적 으로 메 시 지 를 보 낼 수 있 습 니 다.여기 서 두 가지 발송 방식 을 제공 합 니 다.하 나 는 기본 목적지 로 보 내 는 것 이 고 하 나 는 목적지 에 따라 메 시 지 를 보 내 는 것 입 니 다.
3.2 ConsumerService
package com.Jayce.Service;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.TextMessage;
/**
* Created by Administrator on 2017/1/5.
*/
@Service
public class ConsumerService {
@Resource(name="jmsTemplate")
private JmsTemplate jmsTemplate;
public TextMessage receive(Destination destination){
TextMessage textMessage = (TextMessage) jmsTemplate.receive(destination);
try{
System.out.println(" " + destination.toString() + " :\t"
+ textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
return textMessage;
}
}
우리 프로젝트 에는 업무 가 없 기 때문에 메시지 에 대한 처 리 는 출력 입 니 다.jmsTemplate 의 receive 방법 만 호출 하면 안에서 메 시 지 를 얻 을 수 있 습 니 다.지난 블 로그 와 비교 해 보면 지난 블 로그 에서 우 리 는 정 보 를 받 은 후에 수 동 으로 업 무 를 확인 해 야 ActiveMQ 에서 이 소식 이 정확하게 읽 혔 다 는 것 을 확인 할 수 있 습 니 다.스프링 을 통합 하면,사 무 는 스프링 이 관리한다.
3.3 MessageController
package com.Jayce.Controller;
import com.Jayce.Service.ConsumerService;
import com.Jayce.Service.ProducerService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.TextMessage;
/**
* Created by Administrator on 2017/1/5.
*/
@Controller
public class MessageController {
private Logger logger = LoggerFactory.getLogger(MessageController.class);
@Resource(name = "demoQueueDestination")
private Destination destination;
//
@Resource(name = "producerService")
private ProducerService producer;
//
@Resource(name = "consumerService")
private ConsumerService consumer;
@RequestMapping(value = "/SendMessage", method = RequestMethod.POST)
@ResponseBody
public void send(String msg) {
logger.info(Thread.currentThread().getName()+"------------send to jms Start");
producer.sendMessage(msg);
logger.info(Thread.currentThread().getName()+"------------send to jms End");
}
@RequestMapping(value= "/ReceiveMessage",method = RequestMethod.GET)
@ResponseBody
public Object receive(){
logger.info(Thread.currentThread().getName()+"------------receive from jms Start");
TextMessage tm = consumer.receive(destination);
logger.info(Thread.currentThread().getName()+"------------receive from jms End");
return tm;
}
}
통제 층 안에 우리 의 생산자 와 소비자(실제 개발 에서 생산자 와 소비 자 는 같은 프로젝트 에 있 지 않 을 것 이다.그렇지 않 으 면 정보 서비스 라 는 것 은 의미 가 없다)를 주입 해 야 한다.현재 서비스 층 과 통제 층 이 모두 좋아 졌 으 니,이어서 우 리 는 간단 한 테스트 를 진행 할 것 이다.
4.프로젝트 테스트
4.1 ActiveMq 시작
액 티 브 MQ 서비스 가 시작 되 었 는 지 확인 하 세 요.
4.2 시작 항목
프로젝트 는 Tomcat 플러그 인 을 사용 하여 로 컬 에서 Tomcat 를 다운로드 하 는 번 거 로 움 을 피 할 수 있 습 니 다.필요 한 학생 이 사용 할 수 있 습 니 다.
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
4.3 메시지 발송여기 크롬 플러그 인 을 사 용 했 습 니 다.PostMan 이 관심 이 있 는 학생 은 크롬 확장 프로그램 에서 찾 을 수 있 습 니 다.백 엔 드 학생 들 이 페이지 를 만 드 는 것 을 피 할 수 있 습 니 다!
우 리 는 post 요청 을 보 낸 후에 서버 의 효 과 를 보 았 습 니 다.
우 리 는 이미 대열 에 메 시 지 를 보 낸 것 을 볼 수 있다.ActiveMq 의 현재 상 태 를 살 펴 보 겠 습 니 다.
ActiveMq 에 메시지 가 성공 적 으로 전송 되 었 음 을 볼 수 있 습 니 다.
4.4 수신 메시지
get 을 사용 하여 서버 배경 에 접근 요청:
서비스의 출력:
ActiveMq 서버 상태:
우 리 는 소비자 들 이 이미 정 보 를 소 비 했 고 ActiveMq 와 의 링크 를 끊 지 않 았 음 을 볼 수 있다.
4.5 모니터
실제 프로젝트 에서 우 리 는 스스로 수 동 으로 정 보 를 얻 는 일이 매우 적다.만약 수 동 으로 정 보 를 얻 으 려 면 ActiveMq 를 사용 할 필요 가 없다.Redis 를 사용 하면 충분 하 다.
수 동 으로 정 보 를 얻 을 수 없다 면,우 리 는 메시지 가 도 착 했 는 지 확인 하기 위해 감청 기 를 사용 할 수 있다.이렇게 하면 메시지 에 대한 처 리 를 빨리 끝 낼 수 있다.
4.5.1 applicationContext-ActiveMQ.xml 설정
위의 설정 파일 에 서 는 기본적으로 이 모니터 의 설정 파일 을 추 가 했 습 니 다.학생 들 이 이 모니터 를 사용 하고 싶 지 않 으 면 직접 설명 할 수 있 습 니 다.
<!-- (Queue) -->
<bean id="queueMessageListener" class="com.Jayce.Filter.QueueMessageListener" />
<!-- (Queue), , demoQueueDestination, -->
<bean id="queueListenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destination" ref="demoQueueDestination" />
<property name="messageListener" ref="queueMessageListener" />
</bean>
4.5.2 MessageListenerMessageListener 인 터 페 이 스 를 만 들 필요 가 있 습 니 다.
package com.Jayce.Filter;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
/**
* Created by Administrator on 2017/1/5.
*/
public class QueueMessageListener implements MessageListener {
public void onMessage(Message message) {
TextMessage tm = (TextMessage) message;
try {
System.out.println("QueueMessageListener :\t"
+ tm.getText());
//do something ...
} catch (JMSException e) {
e.printStackTrace();
}
}
}
인 터 페 이 스 를 실현 하 는 onMessage 방법 은 우리 가 필요 로 하 는 업무 조작 을 안에서 해결 할 것 입 니 다.이렇게 하면 우리 생산자-미들웨어-소비자,이러한 디 결합 작업 을 완성 할 수 있 습 니 다. 4.5.3 테스트
위 와 마찬가지 로 post Man 으로 post 요청 을 보 내 면 콘 솔 안 을 볼 수 있 습 니 다.메 시 지 는 바로 인쇄 될 수 있 습 니 다.
ActiveMQ 서버 상태 다시 보기:
모니터 를 사용 하 는 효 과 는 수 동 으로 메 시 지 를 받 는 효과 와 같다 는 것 을 알 수 있다.
이렇게 모든 프로젝트 에서 우 리 는 Spring 과 ActiveMQ 를 성공 적 으로 통합 시 켰 다.
4.6 압력 테스트
여 기 는 사실 스트레스 테스트 라 고 할 수 없습니다.pom.xml 파일 을 설정 할 때 comons-httpclient 의 의존 도 를 보 았 습 니 다.그 다음 에 http Client 를 사용 하여 서버 에서 메 시 지 를 보 내 고 싶 습 니 다.서버 가 메 시 지 를 해결 하 는 속도 가 어떤 지 보 겠 습 니 다.
package com.Jaycekon.test;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.junit.Test;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;
/**
* Created by Administrator on 2017/1/5.
*/
public class Client {
@Test
public void test() {
HttpClient httpClient = new HttpClient();
new Thread(new Sender(httpClient)).start();
}
}
class Sender implements Runnable {
public static AtomicInteger count = new AtomicInteger(0);
HttpClient httpClient;
public Sender(HttpClient client) {
httpClient = client;
}
public void run() {
try {
System.out.println(Thread.currentThread().getName()+"---Send message-"+count.getAndIncrement());
PostMethod post = new PostMethod("http://127.0.0.1:8080/SendMessage");
post.addParameter("msg", "Hello world!");
httpClient.executeMethod(post);
System.out.println(Thread.currentThread().getName()+"---Send message Success-"+count.getAndIncrement());
} catch (IOException e) {
e.printStackTrace();
}
}
}
이 안 에는 HttpClient 를 사용 하여 서버 에 Post 요청 을 보 내 고 출력 을 계산 합 니 다.관심 있 는 학생 들 은 스스로 테스트 할 수 있 습 니 다.몇 개의 스 레 드 를 더 열 수 있 습 니 다.여 기 는 하나의 스 레 드 만 열 렸 습 니 다.5.프로젝트 소스 코드:Crawl-Page_jb51.rar
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
activeMQ의 질문오늘은 mule로 activeMQ와 통합할 때, mule를 시작할 때 항상 activeMQ의 시작에 머물러 있습니다.원본 코드를 보니 active MQ에 사순환이 생겼습니다. 위의 코드에서dolock은 시종일관fal...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.