jms是一个规范。java
JMS域:apache
1:点对点消息风格。 容许一个客户端经过一个叫作队列的中间抽象发送一个消息给另外一个客户端。api
2:发布订阅风格。 容许一个客户端经过一个叫作主题的中间抽象发送一个消息给多个客户端,发送消息的客户端将一个消息发布到指定的主题中,而后这个消息将被投递到全部订阅了这个主题的客户端。网络
ActiveMQ是一个易于使用的消息中间件:session
要引入的jaride
<dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.14.1</version> </dependency>
生产者:操作系统
package com.lsq.jms.queue.provider; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; /** * Created by lsq on 2017/2/5. */ public class DNProviderImpl implements DNProvider { private static final String USERNAME= ActiveMQConnection.DEFAULT_USER; private static final String PASSWORD= ActiveMQConnection.DEFAULT_PASSWORD; private static final String BROKURL= ActiveMQConnection.DEFAULT_BROKER_URL; ConnectionFactory connectionFactory; Connection connection; Session session; @Override public void init() { try { connectionFactory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKURL); connection = connectionFactory.createConnection(); connection.start(); session = connection.createSession(true, Session.SESSION_TRANSACTED); } catch (JMSException e) { e.printStackTrace(); } } @Override public void sendMessage(String disname) { try { Queue queue = session.createQueue(disname); MessageProducer producer = session.createProducer(queue); for (int i=0;i<1000;i++) { TextMessage textMessage = session.createTextMessage("生产者 我是XX平台,发送短信"); System.out.println("生产者 我是XX平台,发送短信"); producer.send(textMessage); session.commit(); } } catch (JMSException e) { e.printStackTrace(); } } }
package com.lsq.jms.queue; import com.lsq.jms.queue.provider.DNProvider; import com.lsq.jms.queue.provider.DNProviderImpl; /** * Created by lsq on 2017/2/5. */ public class ProviderTest { public static void main(String[] args) { DNProvider provider = new DNProviderImpl(); provider.init(); provider.sendMessage("LSQ"); } }
消费者:code
package com.lsq.jms.queue.cousumer; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; /** * Created by lsq on 2017/2/5. */ public class DNConsumerImpl implements DNConsumer{ private static final String USERNAME= ActiveMQConnection.DEFAULT_USER; private static final String PASSWORD= ActiveMQConnection.DEFAULT_PASSWORD; private static final String BROKURL= ActiveMQConnection.DEFAULT_BROKER_URL; ConnectionFactory connectionFactory; Connection connection; Session session; @Override public void init() { try { connectionFactory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKURL); connection = connectionFactory.createConnection(); connection.start(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); } catch (JMSException e) { e.printStackTrace(); } } @Override public void getMessage(String disname) { try { Queue queue = session.createQueue(disname); MessageConsumer consumer = session.createConsumer(queue); while(true){ TextMessage textMessage = (TextMessage) consumer.receive(); textMessage.acknowledge(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } if(textMessage != null){ System.out.println("消费者接收消息:接收的消息内容2是:"+textMessage.getText()); }else{ break; } } } catch (JMSException e) { e.printStackTrace(); } } }
package com.lsq.jms.queue; import com.lsq.jms.queue.cousumer.DNConsumer; import com.lsq.jms.queue.cousumer.DNConsumerImpl; /** * Created by lsq on 2017/2/5. */ public class CousumerTest { public static void main(String[] args) { DNConsumer consumer = new DNConsumerImpl(); consumer.init(); consumer.getMessage("LSQ"); } }