2016-10-07 1 views
0

Ich arbeite mit einer Drittpartei zusammen, die eine Azure Service Bus-Warteschlange für den Empfang von Nachrichten bereitgestellt hat. (Wir verwenden die 0.9.0 Azure Gläser aus dem Download-Link auf https://azure.microsoft.com/en-us/documentation/articles/java-download-azure-sdk/)Kann ich in Java SDK 0.9.0 einen Proxy für Azure Service Bus-Verbindungen festlegen?

ich eine Verbindung wie so ein:

Configuration config = new Configuration(); 
config = ServiceBusConfiguration.configureWithConnectionString(null, config, connectionString); 
ServiceBusContract azureService = ServiceBusService.create(config); 

und Empfangen von Nachrichten wie folgt:

ReceiveQueueMessageResult resultQM = azureService.receiveQueueMessage(queueName, receiveMessageOptions); 

Dies funktioniert unter normalen Umständen gut. Doch im Büro, ich habe über einen Proxy gehen, und die Verbindung schlägt fehl mit diesem Fehler:

com.microsoft.windowsazure.exception.ServiceException: com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection timed out: connect 
    at com.microsoft.windowsazure.services.servicebus.implementation.ServiceBusExceptionProcessor.receiveQueueMessage(ServiceBusExceptionProcessor.java:141) 
    at com.mycompany.dr.theircompany.TheirCompanyDataListener.receiveMessage(TheirCompanyDataListener.java:127) 
    at com.mycompany.dr.theircompany.TheirCompanyDataListener.lambda$0(TheirCompanyDataListener.java:75) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection timed out: connect 
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:151) 
    at com.microsoft.windowsazure.services.servicebus.implementation.AuthorizationFilter.handle(AuthorizationFilter.java:39) 
    at com.microsoft.windowsazure.core.pipeline.jersey.ClientFilterRequestAdapter.handle(ClientFilterRequestAdapter.java:35) 
    at com.sun.jersey.api.client.Client.handle(Client.java:648) 
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:680) 
    at com.sun.jersey.api.client.WebResource.post(WebResource.java:251) 
    at com.microsoft.windowsazure.services.servicebus.implementation.ServiceBusRestProxy.receiveMessage(ServiceBusRestProxy.java:248) 
    at com.microsoft.windowsazure.services.servicebus.implementation.ServiceBusRestProxy.receiveQueueMessage(ServiceBusRestProxy.java:216) 
    at com.microsoft.windowsazure.services.servicebus.implementation.ServiceBusExceptionProcessor.receiveQueueMessage(ServiceBusExceptionProcessor.java:137) 
    ... 3 more 
Caused by: java.net.ConnectException: Connection timed out: connect 
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at sun.security.ssl.SSLSocketImpl.connect(Unknown Source) 
    at sun.net.NetworkClient.doConnect(Unknown Source) 
    at sun.net.www.http.HttpClient.openServer(Unknown Source) 
    at sun.net.www.http.HttpClient.openServer(Unknown Source) 
    at sun.net.www.protocol.https.HttpsClient.<init>(Unknown Source) 
    at sun.net.www.protocol.https.HttpsClient.New(Unknown Source) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(Unknown Source) 
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler$1$1.getOutputStream(URLConnectionClientHandler.java:234) 
    at com.sun.jersey.api.client.CommittingOutputStream.commitWrite(CommittingOutputStream.java:117) 
    at com.sun.jersey.api.client.CommittingOutputStream.flush(CommittingOutputStream.java:100) 
    at sun.nio.cs.StreamEncoder.implFlush(Unknown Source) 
    at sun.nio.cs.StreamEncoder.flush(Unknown Source) 
    at java.io.OutputStreamWriter.flush(Unknown Source) 
    at java.io.BufferedWriter.flush(Unknown Source) 
    at com.sun.jersey.core.util.ReaderWriter.writeToAsString(ReaderWriter.java:191) 
    at com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.writeToAsString(AbstractMessageReaderWriterProvider.java:128) 
    at com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:88) 
    at com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:58) 
    at com.sun.jersey.api.client.RequestWriter.writeRequestEntity(RequestWriter.java:300) 
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:213) 
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:149) 
    ... 11 more 

Nun, wenn ich an den documentation für com.microsoft.windowsazure.Configuration aussehen, zeigt es Konstanten für zwei Eigenschaften:

  • PROPERTY_HTTP_PROXY_HOST (String Value "http.proxyHost")
  • PROPERTY_HTTP_PROXY_PORT (String Value "http.proxyPort")

Diese Konstanten scheinen jedoch nicht in 0.9.0 zu existieren. Ich habe versucht, die Eigenschaften der Konfiguration mit den String-Literalen hinzuzufügen, aber dies hatte keine merkliche Auswirkung.

Bin ich hier sogar auf dem richtigen Weg? Gibt es eine Möglichkeit, einen Proxy für den Service-Bus-Vertrag in 0.9.0 zu setzen?

Antwort

0

Entsprechend dem Quellcode der Klasse Configuration sind die Eigenschaften PROPERTY_HTTP_PROXY_HOST & PROPERTY_HTTP_PROXY_PORT als statische Endvariablen definiert. Sie können also ihre Werte nicht über die Methode setProperty ändern.

Wie ich weiß, gibt es zwei Möglichkeiten, Proxy für Java zu unterstützen, die in Ihrem aktuellen Szenario verwendet werden können.

  1. Command Line JVM-Einstellungen: Die Proxy-Einstellungen auf die JVM über Kommandozeilenargumente angegeben:

    java -Dhttp.proxyHost = proxyhostURL -Dhttp.proxyPort = proxyPortNumber -Dhttp.proxyUser = beliebigerbenutzername -Dhttp .proxyPassword = somePassword

  2. Festlegen der Systemeigenschaften in Code Fügen Sie die folgenden Zeilen in Ihren Java-Code ein, damit JVM den Proxy für HTTP-Aufrufe verwendet. Dies würde natürlich erfordern, dass Sie Ihre Java-Quelle neu kompilieren. (Die anderen Methoden erfordern keine Neukompilierung):

    System.setProperty ("http.proxyPort", "someProxyPort"); System.setProperty ("http.proxyUser", "someUserName"); System.setProperty ("http.proxyPassword", "somePassword"); System.setProperty ("http.proxyhost“, "someProxyURL");..

Weitere Informationen zum Networking & Proxies & Eigenschaften in Java, finden Sie in http://docs.oracle.com/javase/7/docs/technotes/guides/net/proxies.html und http://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html

+0

Ich glaube, Sie den Konfigurationscode sind falsch interpretiert' PROPERTY_HTTP_PROXY_HOST' und 'PORT' wird in Verbindung mit der Methode 'setProperty' verwendet, um Werte zu der Karte 'properties' hinzuzufügen Ich habe versucht, die Systemeigenschaften, aber sie scheinen nicht eingehalten werden.Ich kann immer noch keine Verbindung herstellen. – sjohnston

Verwandte Themen