use of io.fabric8.kubernetes.client.Client in project fabric8 by jboss-fuse.
the class TcpGatewayHandler method handle.
@Override
public void handle(final NetSocket socket) {
NetClient client = null;
List<String> paths = serviceMap.getPaths();
TcpClientRequestFacade requestFacade = new TcpClientRequestFacade(socket);
String path = pathLoadBalancer.choose(paths, requestFacade);
if (path != null) {
List<ServiceDetails> services = serviceMap.getServices(path);
if (!services.isEmpty()) {
ServiceDetails serviceDetails = serviceLoadBalancer.choose(services, requestFacade);
if (serviceDetails != null) {
List<String> urlStrings = serviceDetails.getServices();
for (String urlString : urlStrings) {
if (Strings.notEmpty(urlString)) {
// lets create a client for this request...
try {
URI uri = new URI(urlString);
// URL url = new URL(urlString);
String urlProtocol = uri.getScheme();
if (Objects.equal(protocol, urlProtocol)) {
Handler<AsyncResult<NetSocket>> handler = new Handler<AsyncResult<NetSocket>>() {
public void handle(final AsyncResult<NetSocket> asyncSocket) {
socket.resume();
NetSocket clientSocket = asyncSocket.result();
Pump.createPump(clientSocket, socket).start();
Pump.createPump(socket, clientSocket).start();
}
};
client = createClient(socket, uri, handler);
break;
}
} catch (MalformedURLException e) {
LOG.warn("Failed to parse URL: " + urlString + ". " + e, e);
} catch (URISyntaxException e) {
LOG.warn("Failed to parse URI: " + urlString + ". " + e, e);
}
}
}
}
}
}
if (client == null) {
// fail to route
LOG.info("No service available for protocol " + protocol + " for paths " + paths);
socket.close();
}
}
use of io.fabric8.kubernetes.client.Client in project fabric8 by jboss-fuse.
the class ExtendedBurnIn method lotsOfClientLoad.
@Test
public void lotsOfClientLoad() throws Exception {
startRestEndpoint();
startHttpGateway();
DetectingGateway gateway = startDetectingGateway();
final ShutdownTracker tracker = new ShutdownTracker();
// Run some concurrent load against the broker via the gateway...
final StompJmsConnectionFactory factory = new StompJmsConnectionFactory();
factory.setBrokerURI("tcp://localhost:" + gateway.getBoundPort());
for (int client = 0; client < 10; client++) {
new Thread("JMS Client: " + client) {
@Override
public void run() {
while (tracker.attemptRetain()) {
try {
Connection connection = factory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer consumer = session.createConsumer(session.createTopic("FOO"));
MessageProducer producer = session.createProducer(session.createTopic("FOO"));
producer.send(session.createTextMessage("Hello"));
consumer.receive(1000);
connection.close();
} catch (JMSException e) {
e.printStackTrace();
} finally {
tracker.release();
}
}
}
}.start();
}
int httpPort = gateway.getBoundPort();
final URL httpUrl = new URL("http://localhost:" + httpPort + "/hello/world");
for (int client = 0; client < 10; client++) {
new Thread("HTTP Client: " + client) {
@Override
public void run() {
while (tracker.attemptRetain()) {
try {
InputStream is = httpUrl.openConnection().getInputStream();
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int c = 0;
while ((c = is.read()) >= 0) {
baos.write(c);
}
assertEquals("Hello World!", new String(baos.toByteArray()));
} finally {
is.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
tracker.release();
}
}
}
}.start();
}
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
// Lets monitor memory usage for 5 min..
for (int i = 0; i < 60 * 5; i++) {
Thread.sleep(900);
Runtime.getRuntime().gc();
Thread.sleep(100);
long usedMB = ((Long) ((CompositeData) mBeanServer.getAttribute(new ObjectName("java.lang:type=Memory"), "HeapMemoryUsage")).get("used")).longValue() / (1024 * 1024);
System.out.println("Using " + usedMB + " MB of heap.");
}
tracker.stop();
}
use of io.fabric8.kubernetes.client.Client in project fabric8 by jboss-fuse.
the class FabricMQGateway method createListener.
protected GatewayServiceTreeCache createListener() {
String zkPath = getZooKeeperPath();
// TODO we should discover the broker group configuration here using the same
// mq-create / mq-client profiles so that we only listen to a subset of the available brokers here?
ServiceMap serviceMap = new ServiceMap();
VertxService vertxService = getVertxService();
Vertx vertx = vertxService.getVertx();
CuratorFramework curator = getCurator();
LoadBalancer pathLoadBalancer = LoadBalancers.createLoadBalancer(loadBalancerType, stickyLoadBalancerCacheSize);
LoadBalancer serviceLoadBalancer = LoadBalancers.createLoadBalancer(loadBalancerType, stickyLoadBalancerCacheSize);
LOG.info("activating MQ mapping ZooKeeper path: " + zkPath + " host: " + host + " with load balancer: " + pathLoadBalancer);
List<TcpGateway> gateways = new ArrayList<TcpGateway>();
addGateway(gateways, vertx, serviceMap, "tcp", isOpenWireEnabled(), getOpenWirePort(), pathLoadBalancer, serviceLoadBalancer);
addGateway(gateways, vertx, serviceMap, "stomp", isStompEnabled(), getStompPort(), pathLoadBalancer, serviceLoadBalancer);
addGateway(gateways, vertx, serviceMap, "amqp", isAmqpEnabled(), getAmqpPort(), pathLoadBalancer, serviceLoadBalancer);
addGateway(gateways, vertx, serviceMap, "mqtt", isMqttEnabled(), getMqttPort(), pathLoadBalancer, serviceLoadBalancer);
addGateway(gateways, vertx, serviceMap, "ws", isWebsocketEnabled(), getWebsocketPort(), pathLoadBalancer, serviceLoadBalancer);
if (gateways.isEmpty()) {
return null;
}
return new GatewayServiceTreeCache(curator, zkPath, serviceMap, gateways);
}
use of io.fabric8.kubernetes.client.Client in project fabric8 by jboss-fuse.
the class LoadBalancerTest method testStickyLoadBalancer.
@Test
public void testStickyLoadBalancer() throws Exception {
assertLoadBalancerWorksOnEmptyOrSingletonServices(new StickyLoadBalancer());
LoadBalancer loadBalancer = new StickyLoadBalancer();
Set<String> allRequests = new HashSet<String>();
int numberOfClients = 10;
for (int i = 0; i < numberOfClients; i++) {
clientRequestKey = "newClient:" + i;
List<String> results = performRequests(loadBalancer);
Set<String> set = asSet(results);
assertTrue("All values should be the same for client: " + clientRequestKey + " but got: " + set, set.size() == 1);
allRequests.addAll(set);
}
// now we should have a reasonable number of different overall answers.
assertTrue("Across " + numberOfClients + " we should have most of the values: " + allRequests, allRequests.size() > 1);
}
use of io.fabric8.kubernetes.client.Client in project fabric8 by jboss-fuse.
the class FabricDiscoveryAgent method call.
@Override
public Object call() throws Exception {
LOG.info("Using local ZKClient");
managedZkClient = true;
CuratorFrameworkFactory.Builder builder = CuratorFrameworkFactory.builder().connectString(System.getProperty("zookeeper.url", "localhost:2181")).retryPolicy(new RetryOneTime(1000)).connectionTimeoutMs(10000);
String password = System.getProperty("zookeeper.password", "admin");
if (password != null && !password.isEmpty()) {
builder.aclProvider(new CuratorACLManager());
builder.authorization("digest", ("fabric:" + password).getBytes());
}
CuratorFramework client = builder.build();
client.start();
client.getZookeeperClient().blockUntilConnectedOrTimedOut();
return client;
}
Aggregations