JMS(Java Message Service)是一种用于在分布式系统中发送和接收消息的API,它提供了一种简单的方法来实现异步通信,JMS最初是由Sun Microsystems(现已被Oracle收购)开发的,现在是Java EE规范的一部分,本文将介绍JMS的基本概念、使用方法以及与企业集成的相关技术。
JMS基本概念
1、1 JMS定义
JMS(Java Message Service)是一种用于在分布式系统中发送和接收消息的API,它提供了一种简单的方法来实现异步通信,JMS最初是由Sun Microsystems(现已被Oracle收购)开发的,现在是Java EE规范的一部分。
1、2 JMS类型
JMS主要有两种类型的消息:点对点(Point-to-Point)和发布/订阅(Publish/Subscribe),点对点消息是指一个生产者发送给一个消费者的消息,而发布/订阅消息是指一个主题可以有多个消费者订阅,每个消费者都可以收到所有发布到该主题的消息。
JMS使用方法
2、1 创建连接工厂
要使用JMS,首先需要创建一个连接工厂,连接工厂是一个配置对象,用于创建连接实例,创建连接工厂的方法如下:
import javax.jms.ConnectionFactory; import org.apache.activemq.ActiveMQConnectionFactory; ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
2、2 创建连接
创建连接需要提供连接工厂和一些连接属性,连接属性包括用户名、密码、虚拟主机等,创建连接的方法如下:
import javax.jms.Connection; import javax.jms.JMSException; import javax.jms.Session; import javax.jms.Topic; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQSession; import org.apache.activemq.command.ActiveMQTopic; Context context = new InitialContext(); Connection connection = (Connection) context.lookup("ConnectionFactory"); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Topic topic = session.createTopic("testTopic");
2、3 发送消息
创建连接和会话后,可以使用会话对象发送消息,发送消息的方法如下:
import javax.jms.MessageProducer; import javax.jms.QueueSender; import javax.jms.TextMessage; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQSession; import org.apache.activemq.command.ActiveMQQueue; import org.apache.activemq.command.ActiveMQTopic; import org.apache.activemq.pool.PooledConnectionFactory; import org.apache.activemq.pool.PooledConnectionFactoryImpl; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import java.util.concurrent.TimeUnit; public class SendMessage { public static void main(String[] args) throws NamingException, JMSException { Context context = new InitialContext(); PooledConnectionFactory pooledConnectionFactory = (PooledConnectionFactory) context.lookup("pooledConnectionFactory"); GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); poolConfig.setMaxTotal(10); poolConfig.setMaxIdle(5); poolConfig.setMinIdle(2); poolConfig.setMaxWaitMillis(10000); poolConfig.setTestOnBorrow(true); poolConfig.setTestOnReturn(true); poolConfig.setTestWhileIdle(true); poolConfig.setTimeBetweenEvictionRunsMillis(30000); poolConfig.setNumTestsPerEvictionRun(-1); poolConfig.setMinEvictableIdleTimeMillis(-1); poolConfig.setSoftMinEvictableIdleTimeMillis(-1); poolConfig.setLifo(false); poolConfig.setMaxWaitMillisWhenExhausted(-1); pooledConnectionFactory = new PooledConnectionFactoryImpl(new ActiveMQConnectionFactory(), poolConfig); Connection conn = pooledConnectionFactory.getPooledConnection(); Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); Topic topic = session.createTopic("testTopic"); QueueSender sender = session.createSender(topic); TextMessage message = session.createTextMessage("Hello, JMS!"); sender.send(message); } }
2、4 接收消息
创建连接和会话后,可以使用会话对象接收消息,接收消息的方法如下:
```java import javax
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/132519.html