public static void startBroker(Boolean verbose, String bindIP) {
	try {
		
		mdbroker broker = new mdbroker(verbose);
		// Can be called multiple times with different endpoints
		// System.out.println("Starting Broker with port 5555");
		broker.bind(bindIP);
		
		/*String name = ManagementFactory.getRuntimeMXBean().getName();
		logs.info("Process ID for this app = " + name);
		int pid = Integer.parseInt(new File("/proc/self").getCanonicalFile().getName());
		logs.info("Process ID from self file = " + pid);*/
		
		ServiceLocator.instance().checkBrokerStatus = false;
		broker.mediate();
		
	} catch (Exception e) {
		logs.error("Error while starting broker\n", e);
	}
	
	logs.info("Broker Started ...");
}

public mdbroker(boolean verbose) {
	this.verbose = verbose;
	services = new HashMap<String, Service>();
	workers = new HashMap<String, Worker>();
	waiting = new ArrayDeque<Worker>();
	heartbeatAt = System.currentTimeMillis() + HEARTBEAT_INTERVAL;
	ctx = new ZContext();
	socket = ctx.createSocket(ZMQ.ROUTER);
}

private void bind(String endpoint) {
	socket.setTCPKeepAlive(1);
	socket.setTCPKeepAliveCount(5);
	socket.setTCPKeepAliveInterval(5000);
	socket.setTCPKeepAliveIdle(30000);
	socket.bind(endpoint);
	if (verbose) {
		logger.format("I: MDP broker/0.1.1 is active at %s\n", endpoint);
	}
}
