java发送苹果消息慢_Spring-boot JMS 发送消息慢的问题解决

1:在《ActiveMQ 基于zookeeper的主从(levelDB Master/Slave)搭建以及Spring-boot下使用》(http://www.cnblogs.com/yshyee/p/7277801.html)中,采用以下代码进行JMS消息发送:

@Servicepublic classProducer {

@AutowiredprivateJmsMessagingTemplate jmsTemplate;public void sendMessage(Destination destination, finalString message){

jmsTemplate.convertAndSend(destination, message);

}

}

经使用JMeter进行压力测试,发现JMS的发送消息特别慢。

2:下面通过自定义CachingConnectionFactory解决。

(1)SenderConfig.java

packagecom.example.springbootactivemq.jms;importorg.apache.activemq.ActiveMQConnectionFactory;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.jms.connection.CachingConnectionFactory;importorg.springframework.jms.core.JmsTemplate;/*** Created by yan on 2017/8/3.*/@Configurationpublic classSenderConfig {

@Value("${spring.activemq.broker-url}")privateString brokerUrl;

@BeanpublicActiveMQConnectionFactory activeMQConnectionFactory() {

ActiveMQConnectionFactory activeMQConnectionFactory= newActiveMQConnectionFactory();

activeMQConnectionFactory.setBrokerURL(brokerUrl);returnactiveMQConnectionFactory;

}

@BeanpublicCachingConnectionFactory cachingConnectionFactory() {return newCachingConnectionFactory(activeMQConnectionFactory());

}

@BeanpublicJmsTemplate jmsTemplate() {return newJmsTemplate(cachingConnectionFactory());

}

@BeanpublicSender sender() {return newSender();

}

}

(2)Sender.java

packagecom.example.springbootactivemq.jms;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.jms.core.JmsTemplate;importjavax.jms.JMSException;importjavax.jms.Message;importjavax.jms.Session;importjavax.jms.TextMessage;/*** Created by yan on 2017/8/3.*/

public classSender {

@AutowiredprivateJmsTemplate jmsTemplate;public void send(final String destination, finalString message){this.jmsTemplate.convertAndSend(destination, message);

}}

(3)Receiver.java

packagecom.example.springbootactivemq.jms;importorg.springframework.jms.annotation.JmsListener;importorg.springframework.jms.listener.SessionAwareMessageListener;importorg.springframework.jms.support.JmsUtils;importjavax.jms.JMSException;importjavax.jms.MessageProducer;importjavax.jms.Session;importjavax.jms.TextMessage;/*** Created by yan on 2017/8/3.*/

public class Receiver implements SessionAwareMessageListener{

@JmsListener(destination= "${queue.destination}")public voidreceive(String message) {try{

Thread.sleep(2000);

}catch(InterruptedException e) {

e.printStackTrace();

}

}}

(4)ReceiverConfig.java

packagecom.example.springbootactivemq.jms;importorg.apache.activemq.ActiveMQConnectionFactory;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.jms.annotation.EnableJms;importorg.springframework.jms.config.DefaultJmsListenerContainerFactory;/*** Created by yan on 2017/8/3.*/@Configuration

@EnableJmspublic classReceiverConfig {

@Value("${spring.activemq.broker-url}")privateString brokerUrl;

@BeanpublicActiveMQConnectionFactory activeMQConnectionFactory() {

ActiveMQConnectionFactory activeMQConnectionFactory= newActiveMQConnectionFactory();

activeMQConnectionFactory.setBrokerURL(brokerUrl);returnactiveMQConnectionFactory;

}

@BeanpublicDefaultJmsListenerContainerFactory jmsListenerContainerFactory() {

DefaultJmsListenerContainerFactory factory= newDefaultJmsListenerContainerFactory();

factory.setConnectionFactory(activeMQConnectionFactory());

factory.setConcurrency("3-10");returnfactory;

}

@BeanpublicReceiver receiver() {return newReceiver();

}

}

(5)TestCtrl.java

packagecom.example.springbootactivemq.test;importcom.example.springbootactivemq.jms.Sender;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.web.bind.annotation.PathVariable;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.bind.annotation.RestController;importjava.util.HashMap;importjava.util.Map;/*** Created by yan on 2017/8/2.*/@RestController

@RequestMapping(

value= "/test",

headers= "Accept=application/json",

produces= "application/json;charset=utf-8")public classTestCtrl {

@AutowiredprivateSender sender;

@Value("${queue.destination}")privateString destination;

@RequestMapping(

value= "/say/{msg}/to/{name}",

method=RequestMethod.GET

)public Mapsay(@PathVariable String msg, @PathVariable String name){

Map map = new HashMap<>();

map.put("msg", msg);

map.put("name", name);

sender.send(destination, msg);returnmap;

}

}

(6)application.properties

spring.activemq.broker-url=failover:(tcp://192.168.3.10:61616,tcp://192.168.3.11:61616,tcp://192.168.3.12:61616)

spring.activemq.in-memory=truespring.activemq.pool.enabled=falsespring.activemq.user=admin

spring.activemq.password=admin

queue.destination=test.queue

queue.concurrency=3-10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值