Java Message Service - RabbitMQ
来源:互联网 发布:淘宝出国旅游医疗保险 编辑:程序博客网 时间:2024/06/05 01:01
1.概念
jms即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。
2.实现
今天使用的是实现JMS的两个主打产品-RabbitMQ和ActiveMQ之一的RabbitMQ.
开发环境:MyEclipse 10 + jdk8 + RabbitMQ 3.4
3.步骤
1)安装otp_win64_17.4.exe
这个是Rabbit的基础组件,由于RabbitMQ底层不是JAVA语言开发的,所以需要安装这样的一个基础组件。
2)安装 rabbitmq-server-3.4.3.zip
安装这个service之后会创建一个windows service
3)在MyEclipse中创建java项目
项目结构如下:
4)核心类
EndPoint
package co.syntx.examples.rabbitmq;import java.io.IOException;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;/** * Represents a connection with a queue * @author syntx * */public abstract class EndPoint{ protected Channel channel; protected Connection connection; protected String endPointName; public EndPoint(String endpointName) throws IOException{ this.endPointName = endpointName; //Create a connection factory ConnectionFactory factory = new ConnectionFactory(); //hostname of your rabbitmq server factory.setHost("localhost"); //getting a connection connection = factory.newConnection(); //creating a channel channel = connection.createChannel(); //declaring a queue for this channel. If queue does not exist, //it will be created on the server. channel.queueDeclare(endpointName, false, false, false, null); } /** * Close channel and connection. Not necessary as it happens implicitly any way. * @throws IOException */ public void close() throws IOException{ this.channel.close(); this.connection.close(); }}Producer
package co.syntx.examples.rabbitmq;import java.io.IOException;import java.io.Serializable;import org.apache.commons.lang.SerializationUtils;/** * The producer endpoint that writes to the queue. * @author syntx * */public class Producer extends EndPoint{public Producer(String endPointName) throws IOException{super(endPointName);}public void sendMessage(Serializable object) throws IOException { channel.basicPublish("",endPointName, null, SerializationUtils.serialize(object));}}Consumer
package co.syntx.examples.rabbitmq;import java.io.IOException;import java.util.HashMap;import java.util.Map;import org.apache.commons.lang.SerializationUtils;import com.rabbitmq.client.AMQP.BasicProperties;import com.rabbitmq.client.Consumer;import com.rabbitmq.client.Envelope;import com.rabbitmq.client.ShutdownSignalException;/** * The endpoint that consumes messages off of the queue. Happens to be runnable. * @author syntx * */public class QueueConsumer extends EndPoint implements Runnable, Consumer{public QueueConsumer(String endPointName) throws IOException{super(endPointName);}public void run() {try {//start consuming messages. Auto acknowledge messages.channel.basicConsume(endPointName, true,this);} catch (IOException e) {e.printStackTrace();}}/** * Called when consumer is registered. */public void handleConsumeOk(String consumerTag) {System.out.println("Consumer "+consumerTag +" registered");}/** * Called when new message is available. */public void handleDelivery(String consumerTag, Envelope env,BasicProperties props, byte[] body) throws IOException {Map<?, ?> map = (HashMap<?, ?>)SerializationUtils.deserialize(body); System.out.println("Message Number "+ map.get("message number") + " received.");}public void handleCancel(String consumerTag) {}public void handleCancelOk(String consumerTag) {}public void handleRecoverOk(String consumerTag) {}public void handleShutdownSignal(String consumerTag, ShutdownSignalException arg1) {}}Main
package co.syntx.examples.rabbitmq;import java.io.IOException;import java.sql.SQLException;import java.util.HashMap;public class Main {public Main() throws Exception{QueueConsumer consumer = new QueueConsumer("queue");Thread consumerThread = new Thread(consumer);consumerThread.start();Producer producer = new Producer("queue");for (int i = 0; i < 100000; i++) {HashMap<String, Integer> message = new HashMap<String, Integer>();message.put("message number", i);producer.sendMessage(message);System.out.println("Message Number "+ i +" sent.");}}/** * @param args * @throws SQLException * @throws IOException */public static void main(String[] args) throws Exception{ new Main();}}运行效果:
0 0
- Java Message Service - RabbitMQ
- Java Message Service入门
- Java Message Service 介绍
- Java Message Service (JMS)
- Java Message Service 总结
- Java Message Service
- Java Message Service
- JAVA Message Service
- Java Message Service
- Java Message Service初步了解
- JMS ---Java message service例子
- 认识JMS(JAVA Message Service)
- Java消息服务(Java message service)
- Java 消息服务(Java Message Service
- JMS(java message service)java消息服务
- JMS概要(Java Message Service Overview)
- JVM(Java Message Service)的理解
- JMS(Java Message Service)概念归纳
- tomcat(错误一) 解决启动报错问题一
- Xcode常用方法总结
- Activity的四种launchMode
- 字体大小
- 深入了解 CSS3 新特性
- Java Message Service - RabbitMQ
- 用RxJava.Observable取代AsyncTask和AsyncTaskLoader-RxJava Android模版
- jquery弹出登陆效果
- 查看所有窗口小部件的 类名 和receiver名
- android中使用反射获取隐藏类
- Linux mount 命令挂载 Windows 共享文件夹
- Java面试题集(1-50)
- 滑动设置亮度到最小时黑屏
- 简单MVC项目搭建--Java1.7+Eclipse luna + Maven 3.2.5 +spring 4.1.4