rabbitmq 对多服务器p2p模式配置的一个测试

原创 2016年05月31日 00:48:38

一直对rabbitmq p2p 模式的多服务器下做相同配置的 各个服务器数据接受情况比较好奇


今天有空测试了下 

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:rabbit="http://www.springframework.org/schema/rabbit"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/rabbit
     http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd">
     
	<!--配置connection-factory,指定连接rabbit server参数 -->
	<rabbit:connection-factory id="connectionFactory"
		 port="5672"  username="guest" password="guest" host="127.0.0.1"
		/>
	
    
		<!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成 -->
	<rabbit:admin connection-factory="connectionFactory" />
	
	<!--定义queue -->
	<rabbit:queue name="queueTest" durable="true" auto-delete="false" exclusive="false" />
	
		<!-- 定义direct exchange,绑定queueTest -->
	<rabbit:direct-exchange name="exchangeTest" durable="true" auto-delete="false">
		<rabbit:bindings>
			<rabbit:binding queue="queueTest" key="queueTestKey"></rabbit:binding>
		</rabbit:bindings>
	</rabbit:direct-exchange>
	
	<bean id="jsonMessageConverter"  
        class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter"></bean>
	
	<!--定义rabbit template用于数据的接收和发送 -->
	<rabbit:template id="amqpTemplate"  connection-factory="connectionFactory" 
	    exchange="exchangeTest"   message-converter="jsonMessageConverter" />
		
	  
	<!-- 消息接收者 -->
	<bean id="messageReceiver" class="com.bimatrix.revit.mq.MessageConsumer"></bean>
	
	<!-- queue litener  观察 监听模式 当有消息到达时会通知监听在对应的队列上的监听对象-->
    <rabbit:listener-container connection-factory="connectionFactory">
             <rabbit:listener queues="queueTest" ref="messageReceiver"/>
    </rabbit:listener-container>
	
</beans>
</pre><pre code_snippet_id="1702272" snippet_file_name="blog_20160531_4_8975174" name="code" class="html">
</pre><p></p><p>消费者:</p><p></p><pre code_snippet_id="1702272" snippet_file_name="blog_20160531_5_4133388" name="code" class="java">@Component
public class MessageConsumer implements MessageListener {
	
	private Logger logger = LoggerFactory.getLogger(MessageConsumer.class);
	int receiveNum =0 ;


	@Override
	public void onMessage(Message message) {
		receiveNum++ ;
		//logger.info("receive message:{}",message);
//		System.out.println("receive message:{}"+message);
		System.out.println("receive: "+receiveNum);
	}


}

测试代码:

@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:config/applicationContext.xml" })
public class TestQueue {
	@Autowired
	AmqpTemplate amqpTemplate;


	final String queue_key = "queueTestKey";


	@Test
	public void send() {
		try {
			//System.out.println("-----------------------------------------");
			for(int i=1;i<=1000;i++){
				amqpTemplate.convertAndSend(queue_key, i);
				//System.out.println(i);
			}
			//System.out.println("-----------------------------------------");
		} catch (Exception e) {
//			LOGGER.error(e);
		}
	}


连续发送1000条数据给消费者,同一台机器8080 9080端口各启动一个tomcat 代码完全一样,

接受情况

A 机器 receive: 481

receive: 57  不知道为什么分两次打出来 ,在两个输出界面一个tomcat console 一个是junit的测试输出console 

B 机器 receive: 462 


三者合计就是1000  再次测试总和也是对的


说明两台服务器在p2p的配置下 各接受了一部分生产者发送来的数据

再多服务器下配置p2p 相当于阻塞队列 多个线程同时处理,各吃掉一部分队列的数据,起到了分流的效果

当然每个消费者那里还可以在起动线程池来处理各自接收的数据。 

高并发情况下 这种配置也是可以减轻各个服务器压力


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

rabbitmq学习7:ConnectionFactory与Connection的认知

RabbitMQ学习笔记;spring-amqp     从前面几小节的学习,我们可能知道在发送和接收消息重要的类ConnectionFactory,Connection,Channel和Queu...

rabbitmq单机多实例集群与负载均衡

1.rabbitmq集群 单机多实例的集群测试 10.5.16.222上 $ RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit1 rabbit...

RabbitMQ技术详解

RabbitMQ是什么定义 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、Actio...

activemq的几种基本通信方式总结(几种通信讲的很清楚)

简介      在前面一篇文章里讨论过几种应用系统集成的方式,发现实际上面向消息队列的集成方案算是一个总体比较合理的选择。这里,我们先针对具体的一个消息队列Activemq的基本通信方式进行探讨...

RabbitMq六种使用模式(2)_多个消费者

RabbitMq六种使用模式(2)

RabbitMq六种使用模式(3)_订阅发布模式

RabbitMq六种使用模式(3)

高可用rabbitmq集群服务部署步骤

消息队列是非常基础的关键服务,为保证公司队列服务的高可用及负载均衡,现通过如下方式实现: RabbitMQ Cluster + Queue HA + Haproxy + Keepalived3台rab...

根据《RabbitMQ实战--高效部署分布式消息队列》这本书来具体总结下

根据RabbitMQ实战 高效部署分布式消息队列这本书来具体总结下

局域网内配置服务器方法--p2p技术、端口映射、网络域名

最近公司要求在内网搭建服务器提供给外网使用,最主要就是在出差时能过方便的提供数据查看服务。局域网里面的PC机的IP地址只是用来内部地址区分的(内网IP),一般都为192.168.1.XX,当要和外网建...

自家电脑搭建服务器发布网站访问内网及解决80端口被屏蔽、动态IP、无公网IP、P2P穿透软件方法

自家搭建服务器,应用部署t
  • paajp
  • paajp
  • 2014-07-11 22:47
  • 1321
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)