Java Qpid Proton-ActiveMQ代理无法分配请求的地址:bind

Java Qpid Proton-ActiveMQ代理无法分配请求的地址:bind,java,activemq,bind,amqp,qpid,Java,Activemq,Bind,Amqp,Qpid,我真的需要这个问题的答案,这就是为什么我要编辑它 我在连接中使用以下代码构建了一个ApacheActiveMQ代理 Broker.java 公共类经纪人{ private BrokerService broker; public Broker(String connector) { this.broker = new BrokerService(); this.broker.setUseJmx(true); try { this.broker.addCo

我真的需要这个问题的答案,这就是为什么我要编辑它

我在连接中使用以下代码构建了一个ApacheActiveMQ代理

Broker.java

公共类经纪人{

private BrokerService broker;

public Broker(String connector) {
    this.broker = new BrokerService();
    this.broker.setUseJmx(true);
    try {
        this.broker.addConnector(connector);

    } catch (URISyntaxException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void addConnector(String connector){
    try {
        this.broker.addConnector(connector);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void start() {
    try {
        this.broker.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public BrokerService getBroker() {
    return broker;
}

public void setBroker(BrokerService broker) {
    this.broker = broker;
}
}

这是我的问题

我使用Qpid质子库(可在此处获得:)。我有一个类来读取数据,这几乎就是他们在qpid webiste上给出的示例

package messaging;

import java.io.IOException;

import org.apache.qpid.proton.Proton;
import org.apache.qpid.proton.amqp.messaging.AmqpValue;
import org.apache.qpid.proton.engine.BaseHandler;
import org.apache.qpid.proton.engine.Delivery;
import org.apache.qpid.proton.engine.Event;
import org.apache.qpid.proton.engine.Receiver;
import org.apache.qpid.proton.message.Message;
import org.apache.qpid.proton.reactor.FlowController;
import org.apache.qpid.proton.reactor.Handshaker;

public class AMQPSubscriber extends BaseHandler {

    private String broker;
    private String topic;
    private String port;

    public AMQPSubscriber(String broker, String port, String topic) {
        this.broker = broker;
        this.port = port;
        this.topic = topic;
        this.add(new Handshaker());
        this.add(new FlowController());

    }

    @Override
    public void onReactorInit(Event event) {
        try {
            event.getReactor().acceptor(broker, Integer.parseInt(port), new AMQPSubscriber(broker, port, topic));
        } catch (NumberFormatException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onDelivery(Event event) {
        System.out.println("---------Message Received--------");
        Receiver recv = (Receiver) event.getLink();
        Delivery delivery = recv.current();
        if (delivery.isReadable() && !delivery.isPartial()) {
            int size = delivery.pending();
            byte[] buffer = new byte[size];
            int read = recv.recv(buffer, 0, buffer.length);
            recv.advance();

            Message msg = Proton.message();
            msg.decode(buffer, 0, read);
            System.out.println("Subject : " + msg.getProperties().getSubject());
            System.out.println("Text : " + ((AmqpValue) msg.getBody()).getValue());
        }
    }

}
该类在main中被调用:

public static void main (String[]args) throws IOException, TimeoutException, InterruptedException{

    Broker broker = new Broker("amqp://" + host + ":" + AMQPport);
    broker.start();

 AMQPSubscriber receiv = new AMQPSubscriber(host, "5672", topic);
        Reactor r;
        try {
            r = Proton.reactor(receiv);
            r.run();
        } catch (IOException e) {
            e.printStackTrace();
        }


}
但是当我执行这个代码时,我得到一个

 INFO | Loaded the Bouncy Castle security provider.
 INFO | Using Persistence Adapter: KahaDBPersistenceAdapter[C:\Users\alexi\Documents\workspace-sts-3.7.3.RELEASE\IOT\activemq-data\localhost\KahaDB]
 INFO | JMX consoles can connect to service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
 INFO | KahaDB is version 6
 INFO | Recovering from the journal @1:61115
 INFO | Recovery replayed 11 operations from the journal in 0.014 seconds.
 INFO | PListStore:[C:\Users\alexi\Documents\workspace-sts-3.7.3.RELEASE\IOT\activemq-data\localhost\tmp_storage] started
 INFO | Apache ActiveMQ 5.13.3 (localhost, ID:DESKTOP-UK0JIC4-52783-1467025817901-0:1) is starting
 INFO | Listening for connections at: amqp://127.0.0.1:5672
 INFO | Connector amqp://127.0.0.1:5672 started
 INFO | Apache ActiveMQ 5.13.3 (localhost, ID:DESKTOP-UK0JIC4-52783-1467025817901-0:1) started
 INFO | For help or more information please see: http://activemq.apache.org
 WARN | Store limit is 102400 mb (current store usage is 0 mb). The data directory: C:\Users\alexi\Documents\workspace-sts-3.7.3.RELEASE\IOT\activemq-data\localhost\KahaDB only has 7792 mb of usable space. - resetting to maximum available disk space: 7792 mb
 WARN | Temporary Store limit is 51200 mb (current store usage is 0 mb). The data directory: C:\Users\alexi\Documents\workspace-sts-3.7.3.RELEASE\IOT\activemq-data\localhost only has 7792 mb of usable space. - resetting to maximum available disk space: 7792 mb
java.net.BindException: Address already in use: bind
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Unknown Source)
    at sun.nio.ch.Net.bind(Unknown Source)
    at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)
    at java.nio.channels.ServerSocketChannel.bind(Unknown Source)
    at org.apache.qpid.proton.reactor.impl.AcceptorImpl.<init>(AcceptorImpl.java:102)
    at org.apache.qpid.proton.reactor.impl.ReactorImpl.acceptor(ReactorImpl.java:477)
    at messaging.AMQPSubscriber.onReactorInit(AMQPSubscriber.java:33)
    at org.apache.qpid.proton.engine.BaseHandler.handle(BaseHandler.java:209)
    at org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:108)
    at org.apache.qpid.proton.engine.impl.EventImpl.delegate(EventImpl.java:129)
    at org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:114)
    at org.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:307)
    at org.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:275)
    at org.apache.qpid.proton.reactor.impl.ReactorImpl.run(ReactorImpl.java:343)
    at messaging.Main.main(Main.java:98)
INFO |加载了Bouncy Castle安全提供程序。
信息|使用持久性适配器:kahadbpersistencedapter[C:\Users\alexi\Documents\workspace-sts-3.7.3.RELEASE\IOT\activemq data\localhost\KahaDB]
信息| JMX控制台可以连接到服务:JMX:rmi:///jndi/rmi://localhost:1099/jmxrmi
信息| KahaDB是第6版
信息|从日志中恢复@1:61115
信息|恢复在0.014秒内重播了日志中的11个操作。
信息| PListStore:[C:\Users\alexi\Documents\workspace-sts-3.7.3.RELEASE\IOT\activemq data\localhost\tmp_storage]已启动
信息| Apache ActiveMQ 5.13.3(本地主机,ID:DESKTOP-UK0JIC4-52783-1467025817901-0:1)正在启动
信息|在以下位置侦听连接:amqp://127.0.0.1:5672
信息|连接器amqp://127.0.0.1:5672 起动
信息| Apache ActiveMQ 5.13.3(本地主机,ID:DESKTOP-UK0JIC4-52783-1467025817901-0:1)已启动
信息|有关帮助或更多信息,请参阅:http://activemq.apache.org
警告|存储限制为102400 mb(当前存储使用量为0 mb)。数据目录:C:\Users\alexi\Documents\workspace-sts-3.7.3.RELEASE\IOT\activemq data\localhost\KahaDB只有7792 mb的可用空间。-重置为最大可用磁盘空间:7792 mb
警告|临时存储限制为51200 mb(当前存储使用量为0 mb)。数据目录:C:\Users\alexi\Documents\workspace-sts-3.7.3.RELEASE\IOT\activemq data\localhost只有7792 mb的可用空间。-重置为最大可用磁盘空间:7792 mb
java.net.BindException:地址已在使用中:bind
位于sun.nio.ch.Net.bind0(本机方法)
位于sun.nio.ch.Net.bind(未知源)
位于sun.nio.ch.Net.bind(未知源)
位于sun.nio.ch.serversocketchannelpl.bind(未知源)
位于java.nio.channels.ServerSocketChannel.bind(未知源)
位于org.apache.qpid.proton.reactor.impl.AcceptorImpl.(AcceptorImpl.java:102)
位于org.apache.qpid.proton.reactor.impl.ReactorImpl.acceptor(ReactorImpl.java:477)
位于messaging.AMQPSubscriber.onReactorInit(AMQPSubscriber.java:33)
位于org.apache.qpid.proton.engine.BaseHandler.handle(BaseHandler.java:209)
位于org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:108)
位于org.apache.qpid.proton.engine.impl.EventImpl.delegate(EventImpl.java:129)
位于org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:114)
位于org.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:307)
位于org.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:275)
位于org.apache.qpid.proton.reactor.impl.ReactorImpl.run(ReactorImpl.java:343)
在messaging.Main.Main(Main.java:98)
当我使用MQTT和Paho时,这个代理工作得很好,我希望它也能与AMQP一起工作。 我知道bind意味着端口已经被使用,但我不知道如何在没有数据发送的端口上侦听

谢谢你帮助我


Alexi

当另一个应用程序创建了一个服务器套接字,正在侦听您请求的目标端口时,您会收到该错误。您需要检查您是否正在该端口上运行另一个代理实例,或者是否安装了阻止访问的防火墙

当另一个应用程序在您请求的目标端口上侦听服务器套接字时,就会出现该错误。您需要检查您是否正在该端口上运行另一个代理实例,或者是否安装了阻止访问的防火墙

我找到了解决办法

当我将连接器添加到activeMQ嵌入式代理时,它将其添加为TCP,一次只允许一个连接

因此,我创建了一个UDP连接器,如下所示:
broker.addConnector(“udp://“+host+”:“+amqport”)

这个解决方案正在为我工作,我希望它能在将来帮助其他开发人员


干杯,亚历克西我找到了解决办法

当我将连接器添加到activeMQ嵌入式代理时,它将其添加为TCP,一次只允许一个连接

因此,我创建了一个UDP连接器,如下所示:
broker.addConnector(“udp://“+host+”:“+amqport”)

这个解决方案正在为我工作,我希望它能在将来帮助其他开发人员


干杯,Alexi

你的本地IP应该是192.168.100.47吗?如果是,你确定吗?还要检查您的
hosts
文件,查看除了
127.0.0.1
之外,是否有任何
localhost
条目。此IP是服务器地址,是网络中的另一台计算机。
192.168.100.47
应该是您的本地IP吗?如果是,你确定吗?另外,请检查您的
hosts
文件,查看除了
127.0.0.1
之外,是否还有
localhost
的任何条目。此IP是服务器地址,它是网络上的另一台计算机。我尝试过使用“netstat-a-n-o”查找“5672”`当我的程序终止时,我什么都没有了。,我还检查了允许连接的防火墙。在我的应用程序中,唯一使用这个端口的进程是我的嵌入式代理,我想这是AMQP传输所必需的。我猜错误出在其他地方,我曾尝试使用“netstat-a-n-o”查找“5672”`当我的程序终止时,我什么都没有了。我还检查了允许连接的防火墙。在我的应用程序中,唯一使用这个端口的进程是我的嵌入式代理,我想这是AMQP传输所必需的。我想是别的地方出了错