में एक खरगोश एमक्यू का नकल करने की ज़रूरत है, मैं अपनी परियोजना में एक खरगोश एमक्यू का उपयोग कर रहा हूं।मुझे अपने यूनिट टेस्ट
मेरे उपभोक्ता में rabbitMQ के क्लाइंट भाग का कोड है और वास्तविक एमक्यू से कनेक्ट करने के लिए कनेक्शन को tls1.1 की आवश्यकता है।
मैं इस कोड को अपने जुनीट परीक्षण में जांचना चाहता हूं और अपने उपभोक्ता को संदेश वितरण का नकल करना चाहता हूं।
मैं Google में कई टूल के साथ कई उदाहरणों के साथ देखता हूं कि कैसे ऊंट खरगोश या सक्रिय एमक्यू है लेकिन यह उपकरण amqp 1.0 के साथ काम करता है और खरगोश एमक्यू केवल amqp 0.9 में काम करता है।
किसी को यह समस्या थी?
धन्यवाद!
अद्यतन
यह परीक्षण करने के लिए कोड कतार से एक json प्राप्त करने के लिए है।
package com.foo.foo.queue;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import java.security.*;
import java.security.cert.CertificateException;
import javax.net.ssl.*;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.json.JSONObject;
import com.foo.foo.Constants.Constants;
import com.foo.foo.core.ConfigurationContainer;
import com.foo.foo.policyfinders.PolicyFinder;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;
public class BrokerThreadHLConsumer extends Thread {
private static BrokerThreadHLConsumer instance;
private static final Logger log = LogManager.getLogger(BrokerThreadHLConsumer.class);
private Channel channel;
private String queueName;
private PolicyFinder PolicyFinder;
private Connection connection;
private QueueingConsumer consumer;
private boolean loop;
private BrokerThreadHLConsumer() throws IOException {
ConnectionFactory factory = new ConnectionFactory();
char[] keyPassphrase = "clientrabbit".toCharArray();
KeyStore keyStoreCacerts;
ConfigurationContainer configurationContainer = ConfigurationContainer.getInstance();
String exchangeName = configurationContainer.getProperty(Constants.EXCHANGE_NAME);
String rabbitHost = configurationContainer.getProperty(Constants.RABBITMQ_SERVER_HOST_VALUE);
try {
/* Public key cacerts to connect to message queue*/
keyStoreCacerts = KeyStore.getInstance("PKCS12");
URL resourcePublicKey = this.getClass().getClassLoader().getResource("certs/client.keycert.p12");
File filePublicKey = new File(resourcePublicKey.toURI());
keyStoreCacerts.load(new FileInputStream(filePublicKey), keyPassphrase);
KeyManagerFactory keyManager;
keyManager = KeyManagerFactory.getInstance("SunX509");
keyManager.init(keyStoreCacerts, keyPassphrase);
char[] trustPassphrase = "changeit".toCharArray();
KeyStore tks;
tks = KeyStore.getInstance("JCEKS");
URL resourceCacerts = this.getClass().getClassLoader().getResource("certs/cacerts");
File fileCacerts = new File(resourceCacerts.toURI());
tks.load(new FileInputStream(fileCacerts), trustPassphrase);
TrustManagerFactory tmf;
tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(tks);
SSLContext c = SSLContext.getInstance("TLSv1.1");
c.init(keyManager.getKeyManagers(), tmf.getTrustManagers(), null);
factory.setUri(rabbitHost);
factory.useSslProtocol(c);
connection = factory.newConnection();
channel = connection.createChannel();
channel.exchangeDeclare(exchangeName, "fanout");
queueName = channel.queueDeclare().getQueue();
channel.queueBind(queueName, exchangeName, "");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
e.printStackTrace();
} catch (KeyManagementException e1) {
e1.printStackTrace();
} catch (Exception e) {
log.error("Couldn't instantiate a channel with the broker installed in " + rabbitHost);
log.error(e.getStackTrace());
e.printStackTrace();
}
}
public static BrokerThreadHLConsumer getInstance() throws CertificateException, UnrecoverableKeyException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException, IOException {
if (instance == null)
instance = new BrokerThreadHLConsumer();
return instance;
}
public void run() {
if (PolicyFinder != null) {
try {
consumer = new QueueingConsumer(channel);
channel.basicConsume(queueName, true, consumer);
log.info("Consumer broker started and waiting for messages");
loop = true;
while (loop) {
try {
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
JSONObject obj = new JSONObject(message);
log.info("Message received from broker " + obj);
if (StringUtils.isNotEmpty(message) && !PolicyFinder.managePolicySet(obj)) {
log.error("PolicySet error: error upgrading the policySet");
}
} catch (Exception e) {
log.error("Receiving message error");
log.error(e);
}
}
} catch (IOException e) {
log.error("Consumer couldn't start");
log.error(e.getStackTrace());
}
} else {
log.error("Consumer couldn't start cause of PolicyFinder is null");
}
}
public void close() {
loop = false;
try {
consumer.getChannel().basicCancel(consumer.getConsumerTag());
} catch (IOException e) {
e.printStackTrace();
}
try {
channel.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void setLuxPolicyFinder(PolicyFinder PolicyFinder) {
this.PolicyFinder = PolicyFinder;
}
}
कोड का परीक्षण करने के लिए कृपया? अब तक तुमने क्या प्रयास किये हैं? –
इकाई परीक्षण में एकीकरण बिंदु में कोई अधिक बिंदु नहीं है, क्योंकि यह कोई मूल्य प्रदान नहीं करता है। आखिरकार, आप पूरे एपीआई को उन तरीकों से नकल कर सकते हैं जो असली ब्रोकर के साथ काम नहीं करते हैं। मैं यह नहीं कह रहा हूं कि आपको इसका परीक्षण नहीं करना चाहिए, बल्कि एकीकरण परीक्षण का उपयोग करना चाहिए। अपने बुनियादी ढांचे में चल रहे खरगोश एमक्यू का * परीक्षण * उदाहरण लें और इसके खिलाफ एकीकरण परीक्षण चलाएं। जब भी परीक्षण चलता है तो आप यादृच्छिक रूप से एक चैनल बना सकते हैं ताकि कोई संघर्ष न हो। वैकल्पिक रूप से, यदि आप डॉकर या कुछ समान उपयोग कर रहे हैं, तो आप एक निजी ब्रोकर को स्पिन कर सकते हैं। – Augusto
कभी-कभी एसओ उत्तर की बात आती है जब मानवता की तरह व्यवहार करता है - निराशाजनक !!! – NoobEditor