`
kanpiaoxue
  • 浏览: 1782028 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

HornetQ的简单例子

 
阅读更多

最近对MQ(Message Queue)很感兴趣,准备用到项目上。因为是做Java开发的,所以我找了JMS的MQ。开始看了ActiveMQ和HornetQ。我选择了HornetQ,因为看了一些性能测试,我觉得这款JBoss的MQ相当出色。发现国内关于HornetQ的资料很少,国外有一部分,但是版本都很久了。

自己写了一个例子,环境如下:

1、HornetQ的版本是 hornetq-2.2.5.Final

2、JDK1.6.0_30-b12

3、HornetQ自带example里面的config/stand-alone/non-clustered的配置文件

4、HornetQ作为独立的服务器,运行在一台Dell1950(2CPU,16G内存)上

5、自己写了两个小例子,很简单,就是一个Producer和Consumer

6、发送Person类的实例(必须实现Serializable接口)

7、注意:Producer和Consumer用到的Person类,必须在各个项目的相同的package下面,具有相同的serialVersionUID

8、在classpath下面有jndi.properties文件,里面放置着寻找服务器上面JNDI Server必须的配置

9、在classpath下面有个log4j的配置文件,用来答应日志

代码如下:

 

public class Producer {
	private static Logger logger = Logger.getLogger(Producer.class);

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			runExample();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	private static void runExample() throws NamingException, JMSException {
		InitialContext ic = new InitialContext();
		ConnectionFactory cf = (ConnectionFactory) ic
				.lookup("/ConnectionFactory");
		Queue orderQueue = (Queue) ic.lookup("/queue/ExpiryQueue");
		Connection connection = cf.createConnection();
		Session session = connection.createSession(false,
				Session.AUTO_ACKNOWLEDGE);
		MessageProducer producer = session.createProducer(orderQueue);
		connection.start();
		int count = 0;
		try {
			while (true) {
				Person one = new Person(count++, "xuepeng_" + count);
				ObjectMessage msg = session.createObjectMessage(one);
				producer.send(msg);
				logger.info(Producer.class.getName()
						+ " start to sent message: " + one);
			}
		} finally {
			session.close();
		}
	}

}

 

 

 

public class Person implements Serializable {

	private static final long serialVersionUID = 2670718766927459001L;
	private Integer id;
	private String name;
	private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
	private String time = format.format(new Date());

	/**
	 * @param id
	 * @param name
	 */
	public Person(Integer id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	/**
	 * @return the id
	 */
	public Integer getId() {
		return id;
	}

	/**
	 * @param id
	 *            the id to set
	 */
	public void setId(Integer id) {
		this.id = id;
	}

	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param name
	 *            the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}



	

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", time=" + time + "]";
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 37;
		int result = 17;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}

}
 

 

 

public class Consumer {
	private static Logger logger = Logger.getLogger(Consumer.class);

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			runExample();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	private static void runExample() throws NamingException, JMSException {
		InitialContext ic = new InitialContext();
		ConnectionFactory cf = (ConnectionFactory) ic
				.lookup("/ConnectionFactory");
		Queue orderQueue = (Queue) ic.lookup("/queue/ExpiryQueue");
		Connection connection = cf.createConnection();
		Session session = connection.createSession(false,
				Session.AUTO_ACKNOWLEDGE);
		MessageConsumer consumer = session.createConsumer(orderQueue);
		connection.start();
		try {
			while (true) {
				ObjectMessage messageReceived = (ObjectMessage) consumer.receive();
				org.hornetq.jms.example.Person one = (org.hornetq.jms.example.Person)messageReceived.getObject();
				logger.info(Consumer.class.getName()
						+ " start to receive message: " + one);
			}
		} finally {
			session.close();
		}
	}

}

 启动Linux上面的HorneQ服务之后,运行上面的Producer和Consumer均可以实现通讯。

分享到:
评论

相关推荐

    HornetQ2.1中文手册

    - **8.2 一个内核的应用实例**:通过一个具体的例子展示了如何使用HornetQ内核。 #### 六、JMS与内核API之间的映射关系 - **9.1 映射关系**:解释了JMS API与HornetQ内核API之间的对应关系,有助于理解如何在不同...

    HornetQ_User_Manual.pdf

    文档通过简单的例子展示了如何使用核心API,同时也给出了JMS概念到核心API的映射方法。 最后,在客户端类路径章节中,文档提供了关于如何在客户端上设置类路径的说明,包括HornetQ核心客户端、JMS客户端和结合JNDI...

    c-stomp:STOMP是用c编写的STOMP客户端,是简单(或流式)文本定向消息传递协议。 简单的Api使用

    C编写的STOMP客户端, 是简单(或流)导向型的文本消息协议。 目录 介绍 c-stomp是一个C库,用于编写STOMP协议,以便与ActiveMQ,RabbitMQ,HornetQ,ActiveMQ Apollo和其他支持stomp的消息传递协议一起使用。 例子 ...

    JMS相关的Source

    通常,我们需要指定JNDI名称,以便Spring能够通过JNDI查找并获取ConnectionFactory实例。 2. **Destination**: 这是消息的目标,可以是队列或主题。同样,也需要在Spring配置中定义,提供JNDI名称以便查找。 3. **...

    jboss6-jms-chat:添加基于http的简单Java EE 6 MDB和JMS队列生产者

    3. `pom.xml` - Maven构建文件,定义了项目的依赖,如JBoss AS 6的相关库,Java EE 6 API,以及JMS实现(如hornetq或activemq)。 4. `README.md` - 项目说明,指导用户如何编译、部署和运行示例。 5. `deploy`或`...

    JBOSS-7.0.2-Final包

    标签"JBOSS"暗示了这个包与整个JBoss生态系统相关,这意味着它可能包含了一系列的工具和服务,如数据缓存(Infinispan)、消息队列( HornetQ )、事务处理(JTA)、安全认证(JAAS)等。这些组件使得JBoss成为一个...

    JBOSS7学习笔记

    3. **嵌入式部署**:JBoss7支持嵌入式部署,意味着你可以直接在你的应用代码中启动和控制JBoss实例,无需单独运行服务器进程,这对于测试和开发环境尤其便利。 4. **CLI和Management API**:JBoss7提供了强大的...

    mq产品对比

    - 优点:简单易用,性能出色,阿里巴巴内部有大规模应用实例。 - 缺点:文档相对不足,未完全实现JMS接口。 #### 四、结论 综上所述,不同MQ产品各有特色和适用场景。对于寻求成熟稳定解决方案的企业,**ActiveMQ*...

    Netty In Action中文版

    Netty的核心设计理念包括:使用灵活、简单但功能强大的线程模型、统一的API、无连接的DatagramSocket支持以及链逻辑等。这些设计思想使得Netty拥有很高的性能,且易于使用。Netty提供了大量的文档和例子,帮助开发者...

    POC-BNI-2015-05:在 JBoss Fuse 中使用 Camel

    在JBoss Fuse中,Apache Camel作为核心集成组件,可以与其他OSGi服务(如Zookeeper、HornetQ等)紧密协作,提供灵活的微服务架构和分布式解决方案。开发者可以通过JBoss Fuse的管理控制台或命令行工具,方便地监控和...

Global site tag (gtag.js) - Google Analytics