rabbitMQ使用的amqp协议 支持多语言
还有目前比较火的activemq kafaka zeromq
active因为是jms支持的只能使用java语言 不灵活
kafka支持多吞吐 多用在日志上
aeromq有人说是最快的消息队列 物极必反 既然很快就不稳定
kafka的的实际应用
kafka多用在大数据方面 实际开发中昨日之中间件的也比较多
因为每个操作都需要添加日志 在添加日志的过程不能影响正常的核心业务
在这里插入代码片
rabbitMQ
rabbitMQ的服务器时使用的erlang语言编写的 所以在使用rabbitMQ的时候要在本地上配置erlang的环境变量 网上有很多的教程
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>版本自己选择</version>
</dependency>
//提供方代码 导入的两个rabbit的包
//定义链接的工厂
ConnctionFactory factory = new ConnctionFactory();
//设置参数
factory.setHost("localhost");
factory.setPort(5672);
factory.setVirtualHost("/");
factory.setUsername("guest");
factory.setPassword("guest");
//获取链接
Connction connction=factory.getConnction();
//创建通道
Channel channel = connction.createChannel();
//声明(创建)队列
channel.queueDeclare("自定义通道名称", false, false, false, null);
//发送消息
channel.basicPublish("", "通道名称", null, "消息内容");
//将通道和链接关闭
channel.close(),
connction.close()
//消费者代码 前半部分跟提供方相同 不需要做更改 使用QueueingConsumer 做队列的监听
//定义链接的工厂
ConnctionFactory factory = new ConnctionFactory();
//设置参数
factory.setHost("localhost");
factory.setPort(5672);
factory.setVirtualHost("/");
factory.setUsername("guest");
factory.setPassword("guest");
//获取链接
Connction connction=factory.getConnction();
//创建通道
Channel channel = connction.createChannel();
//声明(创建)队列
channel.queueDeclare("自定义通道名称", false, false, false, null);
//下面是消费信息的代码
QueueingConsumer consumer = new QueueingConsumer(channel);
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
byte[] body = delivery.getBody();
String msg=new String(body);
System.out.println(msg);
//确认消息 已经收到
channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);
QueueingConsumer consumer = new QueueingConsumer(channel);
//监听队列
while (true){
channel.basicConsume(QUEUE_NAME, consumer);
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
byte[] body = delivery.getBody();
String msg=new String(body);
System.out.println(msg);
//确认消息 已经收到
channel.basicAck(delivery.getEnvelope().getDeliveryTag(),true);
// System.out.println("消息已经收到:======"+msg);
}
```java
//自定义消费者做监听
//创建类 继承DefaultConsumer类 重写handleDelivery
class myQueueingConsumer extends DefaultConsumer{
public myQueueingConsumer(Channel channel) {
super(channel);
}
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String msg=new String(body);
System.out.println(msg);
}
}
//定义链接的工厂
ConnctionFactory factory = new ConnctionFactory();
//设置参数
factory.setHost("localhost");
factory.setPort(5672);
factory.setVirtualHost("/");
factory.setUsername("guest");
factory.setPassword("guest");
//获取链接
Connction connction=factory.getConnction();
//创建通道
Channel channel = connction.createChannel();
//声明(创建)队列
channel.queueDeclare("自定义通道名称", false, false, false, null);
//下面是消费信息的代码
QueueingConsumer consumer = new QueueingConsumer(channel);
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
byte[] body = delivery.getBody();
String msg=new String(body);
System.out.println(msg);
//确认消息 已经收到
channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);
myQueueingConsumer consumer = new myQueueingConsumer();
channel.basicConsume("通道名称",consumer);
这只是最简单的方式 还有另外的6种消息方法
后续会慢慢的发