1. RabbitMq 安装
我使用的是mac操作系统,所以这里只介绍mac系统上安装rabbitmq的过程,后面代码部分都是一样的,话不多说,直接干货。
安装home brew
官方推荐使用home brew安装,所以如果你没有安装hom brew,请先下载并安装,地址为:http://brew.sh/安装rabbitmq
直接一句话,brew install rabbitmq,是不是很简单。如果遇到错误,很有可能是安装erlang的时候提示权限不够,根据提示给相应的目录相关权限即可。
例如:sudo chmod -R g+w /usr/local安装完成之后需要将/usr/local/sbin添加到$PATH
PATH=$PATH:[…]:/usr/local/sbin然后启动rabbitmq
:~ rabbitmq-server
搞定!
2. RabbitMq 使用
这里只介绍简单的consumer和producer, 直接上代码:
producer:
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
public class RabbitMqProducer {
private final String URL = "localhost";
private final String EXCHANGE_NAME = "bj-geinihua-doc-module";
private static final String[] SEVERITIES = { "key-doc-module", "key-user-event"};
private static final String ROUTING_KEY = "key-doc-module";
private static final String QUEUE_NAME = "bj-geinihua-credit";
private final String USER_NAME = "";
private final String PASSWORD = "";
public void connectBroker(){
try {
ConnectionFactory factory = new ConnectionFactory();
factory.setUsername("guest");
factory.setPassword("guest");
factory.setVirtualHost("/");
factory.setHost("localhost");
factory.setPort(5672);
Connection connection = factory.newConnection();
// ConnectionFactory factory = new ConnectionFactory();
// factory.setHost("localhost");
// Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
//声明转发器
channel.exchangeDeclare(EXCHANGE_NAME, "direct", true);
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY);
//发送6条消息
for (int i = 0; i < 6; i++)
{
String severity = getSeverity();
String message = severity + "_log :" + UUID.randomUUID().toString();
// 发布消息至转发器,指定routingkey
channel.basicPublish(EXCHANGE_NAME, severity, null, message
.getBytes());
System.out.println(" [x] Sent '" + message + "'");
}
channel.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String [] args){
RabbitMqProducer producer = new RabbitMqProducer();
producer.connectBroker();
}
/**
* 随机产生一种日志类型
*
* @return
*/
private static String getSeverity()
{
Random random = new Random();
int ranVal = random.nextInt(2);
return SEVERITIES[ranVal];
}
}
consumer:
import java.io.IOException;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.QueueingConsumer;
public class RabbitMqConsumer {
private final String URL = "localhost";
private final String EXCHANGE_NAME = "bj-geinihua-doc-module";
private static final String[] SEVERITIES = { "key-doc-module", "key-user-event"};
private static final String ROUTING_KEY = "key-doc-module";
private static final String QUEUE_NAME = "bj-geinihua-credit";
private final String USER_NAME = "";
private final String PASSWORD = "";
public static void main(String[] args){
RabbitMqConsumer consumer = new RabbitMqConsumer();
consumer.connectBroker("key-user-event");
}
public void connectBroker(String routingKey){
try {
ConnectionFactory factory = new ConnectionFactory();
factory.setUsername("guest");
factory.setPassword("guest");
factory.setVirtualHost("/");
factory.setHost("localhost");
factory.setPort(5672);
Connection connection = factory.newConnection();
final Channel channel = connection.createChannel();
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, routingKey);
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(QUEUE_NAME, true, consumer);
while (true)
{
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
System.out.println(" [x] Received '" + message + "'");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
OK,运行试试吧,如有问题,可以添加我的qq:64701333,一起学习探讨,Good luck!
参考链接:
http://www.rabbitmq.com/api-guide.html
http://blog.youkuaiyun.com/lmj623565791/article/details/37620057