Metamorphosis(Metaq)在项目中的使用

Metamorphosis(Metaq)在项目中的使用

metaq的wiki介绍参考如下:metaq-wiki;服务端下载地址:http://download.csdn.net/detail/facetoqiang/9595008 也可以在google资源库重下载(记得翻墙):http://code.google.com/p/meta-queue/downloads/list

需要准备安装的软件有:

  1. jdk
  2. zookeeper

本文从以下开始说明:

  • metaq服务端安装配置
  • metaq客户端引入使用
  • metaq使用总结

1. metaq服务端安装配置

解压下载的server如下: 输入图片说明 项目结构如下:

metamorphosis-server-wrapper
			bin			------ 二进制命令文件夹
				env.bat							------  
				env.sh							------ 环境配置 可以修改  java_home
				localMetaServer.bat				------  日志配置文件
				log4j.dtd						------  日志配置文件
				log4j.properties				------  日志配置文件
				log4j.xml						------  日志配置文件
				metaServer.bat					------   win 主二进制文件
				metaServer.sh  					------   lin 主二进制文件
				slave-reloadconfig.sh			------   动态添加 topic 需要执行该命令
				tools_log4j.properties			------   日志配置文件
				tools-monitor-start.sh			------   工具监控【不可用】
				tools-run-class.sh				------    工具方法【不可用】
			conf		------ 所有配置文件文件夹
				async_slave.properties			------
				gregor_slave.properties			------
				jettyBroker.properties			------
				monitor.properties				------
				notifyadaper					------
				notifySlave.properties			------
				sample.server.ini				------
				samsa_master.properties			------
				server.ini						------ 主配置文件  可以配置端口等
				timetunnel.properties			------
				zk.properties					------ zk 配置
			lib			------
				
			logs		------ 生成日志的目录
				meta-monitor.log	------ 监控日志
				metaServer.log		------ 消息中间件运行时日志
			
			provided				------ 【不可用】
				README				------  使用说明

执行以下命令:

 ./metaServer.sh

看到详细使用说明: 输入图片说明

1.1 开始启动metaq

使用如下命令启动:

 ./metaServer.sh  start

看到如下表示启动成功:

[INFO] [main] 08-04 16:31:32,223 [MetaMorphosisBroker] - Starting metamorphosis server...
[INFO] [main] 08-04 16:31:32,232 [MetaMorphosisBroker] - Start metamorphosis server successfully
[INFO] [main] 08-04 16:31:34,820 [Server] - Starting dashboard http server at port  9199
[INFO] [main] 08-04 16:31:34,829 [Server] - jetty-7.6.1.v20120215
[INFO] [main] 08-04 16:31:34,855 [AbstractConnector] - Started SelectChannelConnector@0.0.0.0:9199
[INFO] [main] 08-04 16:31:34,856 [Server] - Started dashboard http server successfully.

1.2 启动成功

启动成功后运行效果图 输入图片说明 开始你的metaq之旅吧。

2. metaq客户端引入使用

2.1 客户端引入类库

客户端程序需要引入metaq的客户端jar通过如下pom引入:

<properties>
    <metamorphosis_client>1.4.6.2</metamorphosis_client>
</properties>
    
		<dependency>
			<groupId>com.taobao.metamorphosis</groupId>
			<artifactId>metamorphosis-client</artifactId>
			<version>${metamorphosis_client}</version>
		</dependency>
		<dependency>
			<groupId>com.taobao.metamorphosis</groupId>
			<artifactId>metamorphosis-client-extension</artifactId>
			<version>${metamorphosis_client}</version>
		</dependency>
		<dependency>
			<groupId>com.taobao.metamorphosis</groupId>
			<artifactId>metamorphosis-storm-spout</artifactId>
			<version>${metamorphosis_client}</version>
		</dependency>

2.2 结合spring配置文件配置

2.2.1 创建meta.properties文件

文件内容如下:

#	Topics section
meta.topic=test
meta.topic.group=sys-mc-group-1
meta.topic.maxBufferSize=16384

#zookeeper config
zk.zkConnect=192.168.1.131:2181
zk.zkSessionTimeoutMs=30000
zk.zkConnectionTimeoutMs=30000
zk.zkSyncTimeMs=5000
2.2.2 创建metaq spring的配置文件

需要分别创建两个文件: spring-metaq-common.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
	
	<!-- 配置文件读取配置 -->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
     	<property name="order" value="2" />  
    	<property name="ignoreUnresolvablePlaceholders" value="true" />    
		<property name="locations">  
			<list>  
                 <value>classpath:metaq/meta.properties</value>  
            </list>  
        </property>  
	</bean> 
    <!--  message session factory -->
    <bean id="messageSessionFactory" class="com.taobao.metamorphosis.client.extension.spring.MetaqMessageSessionFactoryBean">
        <property name="zkConnect" 					value="${zk.zkConnect}"/>
        <property name="zkSessionTimeoutMs" 		value="${zk.zkSessionTimeoutMs}"/>
        <property name="zkConnectionTimeoutMs" 		value="${zk.zkConnectionTimeoutMs}"/>
        <property name="zkSyncTimeMs" 				value="${zk.zkSyncTimeMs}"/>
    </bean>
    <!--  message body converter using java serialization. -->
    <bean id="messageBodyConverter" 
    		class="com.taobao.metamorphosis.client.extension.spring.JavaSerializationMessageBodyConverter"/>
    
    
    <!--  template to send messages. -->
    <bean id ="metaqTemplate" class="com.taobao.metamorphosis.client.extension.spring.MetaqTemplate">    
        <property name="messageSessionFactory" ref="messageSessionFactory"/>
        <property name="messageBodyConverter"  ref="messageBodyConverter"/>
    </bean>   
    
    
</beans>

spring-metaq-server.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    
    <!--  topics to be subscribed. -->
    <bean id = "metaMcTopic" class="com.taobao.metamorphosis.client.extension.spring.MetaqTopic">
        <!-- consumer group -->
        <property name="group" 			value="${meta.topic.group}"/>
        <!--  topic -->
        <property name="topic" 			value="${meta.topic}"/>
        <!--  max buffer size to fetch messages -->
        <property name="maxBufferSize"  value="${meta.topic.maxBufferSize}"/>
    </bean>
    <!-- 服务端 配置项 -->
    <bean id= "metaMcListener" class="com.huaying.sys.mc.listener.SysMessageListener">
        <!--  threads to process these messages. -->
        <property name="processThreads" value="10"/>
    </bean>
         
    <!--  listener container to subscribe topics -->
    <bean id ="listenerContainer" 
    		class="com.taobao.metamorphosis.client.extension.spring.MessageListenerContainer"> 
         <property name="messageSessionFactory" 	ref="messageSessionFactory"/>
         <property name="messageBodyConverter"  	ref="messageBodyConverter"/>
         <property name="subscribers">
             <map>
                 <entry key-ref="metaMcTopic" 					value-ref="metaMcListener"/>
             </map>
         </property>
    </bean>
    
</beans>

####2.2.3 定义生产者和消费者 SysMessageListener类消费消息简单如下:


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.taobao.metamorphosis.Message;
import com.taobao.metamorphosis.client.extension.spring.DefaultMessageListener;
import com.taobao.metamorphosis.client.extension.spring.MetaqMessage;

/**
 * 
 * <P>
 * File name : SysMessageListener.java
 * </P>
 * <P>
 * Author : zhangyq
 * </P>
 * <P>
 * Date : 2015年8月10日下午4:11:12
 * </P>
 * <P>
 * Desc : 监听程序 类似消费者
 * </P>
 * <P>
 * Update History :
 * <ul>
 * <li></li>
 * <li></li>
 * </ul>
 * </P>
 */
// @Component
public class SysMessageListener extends DefaultMessageListener<String> {

	private Logger LOG = LoggerFactory.getLogger(this.getClass());


	@SuppressWarnings("unchecked")
	@Override
	public void onReceiveMessages(MetaqMessage<String> msg) {


		String body = msg.getBody();
		Message message = msg.getRawMessage();
		LOG.info("消息ID:{},消息topic:{},消息Partition:{},消息attribute:{},消息内容为:{}", new Object[] { message.getId(),
				message.getTopic(), message.getPartition(), message.getAttribute(), body });
		

	}

}

生产消息的类:


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

import com.taobao.metamorphosis.client.extension.spring.MessageBuilder;
import com.taobao.metamorphosis.client.extension.spring.MetaqTemplate;
import com.taobao.metamorphosis.client.extension.spring.MetaqTopic;
import com.taobao.metamorphosis.client.producer.SendResult;

/**
 * <P>File name : MessageCenterSOAService.java </P>
 * <P>Author : zhangyq </P> 
 * <P>Date : 2016年8月4日下午4:50:31 </P>
 * <P>Desc : 发送消息的类</P>
 * <P>Update History : <ul>
 *     <li></li>
 *     <li></li> 
 *     </ul>
 * </P>
 */
public class MessageCenterSOAService  {

	private Logger LOG	 =	LoggerFactory.getLogger(this.getClass());
	
	@Autowired
	private MetaqTemplate metaqTemplate;
	
	@Autowired
	@Qualifier("metaMcTopic")
	private MetaqTopic    metaMcTopic;

	
//	@Override
	public String productionMessage(String jsonMessage) {
		

		// send message
		SendResult sendResult = null;
		try {
			sendResult = metaqTemplate.send(
					MessageBuilder.withTopic(metaMcTopic.getTopic()).withAttribute("sys").withBody(jsonMessage)
					);
			if (sendResult.isSuccess()) {
				LOG.info("发送成功!");
			}else{
				LOG.error("发送消息失败:"+sendResult.getErrorMessage());
			}
		} catch (InterruptedException e) {
			
		}
	
		
		return sendResult.toString();
	}


}

调用生产者类生产一条消息试试吧。 通过查看你的消息消费情况: 输入图片说明

3. metaq使用总结

更多特性请参考:Java-Client-Guide

转载于:https://my.oschina.net/zzuqiang/blog/727338

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值