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"); } }