java远程连接调用Rabbitmq的实例代码

网友投稿 282 2023-04-27


java远程连接调用Rabbitmq的实例代码

本文介绍了java远程连接调用Rabbitmq,分享给大家,希望此文章对各位有所帮助。

打开IDEA创建一个maven工程(Java就可以了)。

pom.xml文件如下

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.zhenqi

rabbitmq-study

1.0-SNAPSHOT

jar

rabbitmq-study

http://maven.apache.org

UTF-8

junit

junit

4.12

test

com.rabbitmq

amqp-client

4.1.0

org.slf4j

slf4j-api

org.slf4j

slf4j-log4j12

1.7.21

commons-lang

commons-lang

2.6

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.zhenqi

rabbitmq-study

1.0-SNAPSHOT

jar

rabbitmq-study

http://maven.apache.org

UTF-8

junit

junit

4.12

test

com.rabbitmq

amqp-client

4.1.0

org.slf4j

slf4j-api

org.slf4j

slf4j-log4j12

1.7.21

commons-lang

commons-lang

2.6

为了能远程访问rabbitmq,则需要编辑 /etc/rabbitmq/rabbitmq.conf,添加以下内容。

[

{rabbit, [{tcp_listeners, [5672]}, {loopback_users, ["asdf"]}]}

]

添加administrator角色

rabbitmqctl set_user_tags openstack administrator

创建抽象队列 EndPoint.java

package com.zhenqi;

import com.rabbitmq.client.Channel;

import com.rabbitmq.client.Connection;

import com.rabbitmq.client.ConnectionFactory;

/**

* Created by wuming on 2017/7/16.

*/

public abstract class EndPoint {

protected Channel channel;

protected Connection connection;

protected String endPointName;

public EndPoint(String endpointName) throws Exception {

this.endPointName = endpointName;

//创建一个连接工厂 connection factory

ConnectionFactory factory = new ConnectionFactory();

//设置rabbitmq-server服务IP地址

factory.setHost("192.168.146.128");

factory.setUsername("openstack");

factory.setPassword("rabbitmq");

factory.setPort(5672);

factory.setVirtualHost("/");

//得到 连接

connection = factory.newConnectiohttp://n();

//创建 channel实例

channel = connection.createChannel();

channel.queueDeclare(endpointName, false, false, false, null);

}

/**

* 关闭channel和connection。并非必须,因为隐含是自动调用的。

* @throws IOException

*/

public void close() throws Exception{

this.channel.close();

this.connection.close();

}

}

生产者Producer.java

生产者类的任务是向队列里写一条消息

package com.zhenqi;

import org.apache.commons.lang.SerializationUtils;

import java.io.Serializable;

/**

* Created by wuming on 2017/7/16.

*/

public class Producer extends EndPoint {

public Producer(String endpointName) throws Exception {

super(endpointName);

}

public void sendMessage(Serializable object) throws Exception {

channel.basicPublish("",endPointName, null, SerializationUtils.sehttp://rialize(object));

}

}

消费者QueueConsumer.java

消费者可以以线程方式运行,对于不同的事件有不同的回调函数,其中最主要的是处理新消息到来的事件。

package com.zhenqi;

import com.rabbitmq.client.AMQP;

import com.rabbitmq.client.Consumer;

import com.rabbitmq.client.Envelope;

import com.rabbitmq.client.ShutdownSignalException;

import org.apache.commons.lang.SerializationUtils;

import org.apache.log4j.Logger;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

/**

* Created by wuming on 2017/7/16.

*/

public class QueueConsumer extends EndPoint implements Runnable, Consumer {

private Logger LOG=Logger.getLogger(QueueConsumer.class);

public QueueConsumer(String endpointName) throws Exception {

super(endpointName);

}

public void handleConsumeOk(String s) {

}

public void handleCancelOk(String s) {

}

public void handleCancel(String s) throws IOException {

}

public void handleShutdownSignal(String s, ShutdownSignalException e) {

}

public void handleRecoverOk(String s) {

LOG.info("Consumer "+s +" registered");

}

public void handleDelivery(String s, Envelope envelope, AMQP.BasicProperties basicProperties, byte[] bytes) throws IOException {

Map map = (HashMap) SerializationUtils.deserialize(bytes);

LOG.info("Message Number "+ map.get("message number") + " received.");

}

public void run() {

try{

channel.basicConsume(endPointName, true,this);

}catch(IOException e){

e.printStackTrace();

}

}

}

测试

运行一个消费者线程,然后开始产生大量的消息,这些消息会被消费者取走

package com.zhenqi;

import java.util.HashMap;

/**

* Created by wuming on 2017/7/16.

*/

public class TestRabbitmq {

public static void main(String[] args){

try{

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 message = new HashMap();

message.put("message number", i);

producer.sendMessage(message);

System.out.println("Message Number "+ i +" sent.");

}

}catch(Exception e){

e.printStackTrace();

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Vue.extend构造器的详解
下一篇:Spring MVC深入学习之启动初始化过程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~