private void doCreateBroker(boolean memoryLimit, int expireMessagesPeriod) throws Exception {
    broker = new BrokerService();
    broker.setBrokerName("localhost");
    broker.setUseJmx(true);
    broker.setDeleteAllMessagesOnStartup(true);
    broker.addConnector("tcp://localhost:0");

    PolicyMap policyMap = new PolicyMap();
    PolicyEntry defaultEntry = new PolicyEntry();
    defaultEntry.setOptimizedDispatch(optimizedDispatch);
    defaultEntry.setExpireMessagesPeriod(expireMessagesPeriod);
    defaultEntry.setMaxExpirePageSize(800);

    defaultEntry.setPendingQueuePolicy(pendingQueuePolicy);

    if (memoryLimit) {
      // so memory is not consumed by DLQ turn if off
      defaultEntry.setDeadLetterStrategy(null);
      defaultEntry.setMemoryLimit(200 * 1000);
    }

    policyMap.setDefaultEntry(defaultEntry);

    broker.setDestinationPolicy(policyMap);
    broker.start();
    broker.waitUntilStarted();

    connectionUri = broker.getTransportConnectors().get(0).getPublishableConnectString();
  }