[ISSUE #5069] polish the startup of proxy; can specify parameters on the command line of proxy (#5083)

undefined
This commit is contained in:
lk
2022-09-16 17:31:27 +08:00
committed by GitHub
parent 8ba84c31d6
commit 6f75e3d699
14 changed files with 438 additions and 44 deletions
+1
View File
@@ -35,6 +35,7 @@ header:
- '*/src/test/resources/META-INF/service/*'
- '*/src/main/resources/META-INF/service/*'
- '*/src/test/resources/rmq-proxy-home/conf/rmq-proxy.json'
- '*/src/test/resources/mockito-extensions/*'
- '**/target/**'
- '**/*.iml'
- 'docs/**'
+34 -1
View File
@@ -42,4 +42,37 @@ fi
export ROCKETMQ_HOME
sh ${ROCKETMQ_HOME}/bin/runbroker.sh org.apache.rocketmq.broker.BrokerStartup $@
other_args=" "
enable_proxy=false
while [[ $# -gt 0 ]]; do
case $1 in
--enable-proxy)
enable_proxy=true
shift
;;
-c|--configFile)
broker_config="$2"
shift
shift
;;
*)
other_args=${other_args}" "${1}
shift
;;
esac
done
if [ "$enable_proxy" = true ]; then
args_for_proxy=$other_args" -pm local"
if [ "$broker_config" != "" ]; then
args_for_proxy=${args_for_proxy}" -bc "${broker_config}
fi
sh ${ROCKETMQ_HOME}/bin/runserver.sh org.apache.rocketmq.proxy.ProxyStartup ${args_for_proxy}
else
args_for_broker=$other_args
if [ "$broker_config" != "" ]; then
args_for_broker=${args_for_broker}" -c "${broker_config}
fi
sh ${ROCKETMQ_HOME}/bin/runbroker.sh org.apache.rocketmq.broker.BrokerStartup ${args_for_broker}
fi
+6 -1
View File
@@ -17,7 +17,12 @@
case $1 in
broker)
pid=`ps ax | grep -i 'org.apache.rocketmq.proxy.ProxyStartup' | grep '\-pm local' |grep java | grep -v grep | awk '{print $1}'`
if [ "$pid" != "" ] ; then
echo "The mqbroker with proxy enable is running(${pid})..."
kill ${pid}
echo "Send shutdown request to mqbroker with proxy enable OK(${pid})"
fi
pid=`ps ax | grep -i 'org.apache.rocketmq.broker.BrokerStartup' |grep java | grep -v grep | awk '{print $1}'`
if [ -z "$pid" ] ; then
echo "No mqbroker running."
+1 -1
View File
@@ -1,3 +1,3 @@
{
"rocketMQClusterName": "DefaultCluster"
}
+2
View File
@@ -26,6 +26,7 @@ java_library(
"//common",
"//client",
"//broker",
"//srvutil",
"//acl",
"@maven//:org_apache_rocketmq_rocketmq_proto",
"@maven//:org_apache_commons_commons_lang3",
@@ -50,6 +51,7 @@ java_library(
"@maven//:ch_qos_logback_logback_classic",
"@maven//:com_google_code_findbugs_jsr305",
"@maven//:org_checkerframework_checker_qual",
"@maven//:commons_cli_commons_cli",
],
)
@@ -0,0 +1,56 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.rocketmq.proxy;
public class CommandLineArgument {
private String namesrvAddr;
private String brokerConfigPath;
private String proxyConfigPath;
private String proxyMode;
public String getNamesrvAddr() {
return namesrvAddr;
}
public void setNamesrvAddr(String namesrvAddr) {
this.namesrvAddr = namesrvAddr;
}
public String getBrokerConfigPath() {
return brokerConfigPath;
}
public void setBrokerConfigPath(String brokerConfigPath) {
this.brokerConfigPath = brokerConfigPath;
}
public String getProxyConfigPath() {
return proxyConfigPath;
}
public void setProxyConfigPath(String proxyConfigPath) {
this.proxyConfigPath = proxyConfigPath;
}
public String getProxyMode() {
return proxyMode;
}
public void setProxyMode(String proxyMode) {
this.proxyMode = proxyMode;
}
}
@@ -20,11 +20,17 @@ package org.apache.rocketmq.proxy;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.core.joran.spi.JoranException;
import com.google.common.collect.Lists;
import io.grpc.protobuf.services.ChannelzService;
import io.grpc.protobuf.services.ProtoReflectionService;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.lang3.StringUtils;
import org.apache.rocketmq.broker.BrokerController;
import org.apache.rocketmq.broker.BrokerStartup;
@@ -36,6 +42,7 @@ import org.apache.rocketmq.logging.InternalLogger;
import org.apache.rocketmq.logging.InternalLoggerFactory;
import org.apache.rocketmq.proxy.common.AbstractStartAndShutdown;
import org.apache.rocketmq.proxy.common.StartAndShutdown;
import org.apache.rocketmq.proxy.config.Configuration;
import org.apache.rocketmq.proxy.config.ConfigurationManager;
import org.apache.rocketmq.proxy.config.ProxyConfig;
import org.apache.rocketmq.proxy.grpc.GrpcServer;
@@ -43,6 +50,8 @@ import org.apache.rocketmq.proxy.grpc.GrpcServerBuilder;
import org.apache.rocketmq.proxy.grpc.v2.GrpcMessagingApplication;
import org.apache.rocketmq.proxy.processor.DefaultMessagingProcessor;
import org.apache.rocketmq.proxy.processor.MessagingProcessor;
import org.apache.rocketmq.remoting.protocol.RemotingCommand;
import org.apache.rocketmq.srvutil.ServerUtil;
import org.slf4j.LoggerFactory;
public class ProxyStartup {
@@ -58,9 +67,9 @@ public class ProxyStartup {
public static void main(String[] args) {
try {
ConfigurationManager.initEnv();
initLogger();
ConfigurationManager.intConfig();
// parse argument from command line
CommandLineArgument commandLineArgument = parseCommandLineArgument(args);
initLogAndConfiguration(commandLineArgument);
// init thread pool monitor for proxy.
initThreadPoolMonitor();
@@ -100,7 +109,59 @@ public class ProxyStartup {
log.info(new Date() + " rocketmq-proxy startup successfully");
}
private static MessagingProcessor createMessagingProcessor() {
protected static void initLogAndConfiguration(CommandLineArgument commandLineArgument) throws Exception {
if (StringUtils.isNotBlank(commandLineArgument.getProxyConfigPath())) {
System.setProperty(Configuration.CONFIG_PATH_PROPERTY, commandLineArgument.getProxyConfigPath());
}
ConfigurationManager.initEnv();
initLogger();
ConfigurationManager.intConfig();
setConfigFromCommandLineArgument(commandLineArgument);
}
protected static CommandLineArgument parseCommandLineArgument(String[] args) {
CommandLine commandLine = ServerUtil.parseCmdLine("mqproxy", args,
buildCommandlineOptions(), new DefaultParser());
if (commandLine == null) {
throw new RuntimeException("parse command line argument failed");
}
CommandLineArgument commandLineArgument = new CommandLineArgument();
MixAll.properties2Object(ServerUtil.commandLine2Properties(commandLine), commandLineArgument);
return commandLineArgument;
}
private static Options buildCommandlineOptions() {
Options options = ServerUtil.buildCommandlineOptions(new Options());
Option opt = new Option("bc", "brokerConfigPath", true, "Broker config file path for local mode");
opt.setRequired(false);
options.addOption(opt);
opt = new Option("pc", "proxyConfigPath", true, "Proxy config file path");
opt.setRequired(false);
options.addOption(opt);
opt = new Option("pm", "proxyMode", true, "Proxy run in local or cluster mode");
opt.setRequired(false);
options.addOption(opt);
return options;
}
private static void setConfigFromCommandLineArgument(CommandLineArgument commandLineArgument) {
if (StringUtils.isNotBlank(commandLineArgument.getNamesrvAddr())) {
ConfigurationManager.getProxyConfig().setNamesrvAddr(commandLineArgument.getNamesrvAddr());
}
if (StringUtils.isNotBlank(commandLineArgument.getBrokerConfigPath())) {
ConfigurationManager.getProxyConfig().setBrokerConfigPath(commandLineArgument.getBrokerConfigPath());
}
if (StringUtils.isNotBlank(commandLineArgument.getProxyMode())) {
ConfigurationManager.getProxyConfig().setProxyMode(commandLineArgument.getProxyMode());
}
}
protected static MessagingProcessor createMessagingProcessor() {
String proxyModeStr = ConfigurationManager.getProxyConfig().getProxyMode();
MessagingProcessor messagingProcessor;
@@ -112,6 +173,12 @@ public class ProxyStartup {
@Override
public void start() throws Exception {
brokerController.start();
String tip = "The broker[" + brokerController.getBrokerConfig().getBrokerName() + ", "
+ brokerController.getBrokerAddr() + "] boot success. serializeType=" + RemotingCommand.getSerializeTypeConfigInThisServer();
if (null != brokerController.getBrokerConfig().getNamesrvAddr()) {
tip += " and name server is " + brokerController.getBrokerConfig().getNamesrvAddr();
}
log.info(tip);
}
@Override
@@ -134,8 +201,14 @@ public class ProxyStartup {
return application;
}
private static BrokerController createBrokerController() {
String[] brokerStartupArgs = new String[] {"-c", ConfigurationManager.getProxyConfig().getBrokerConfigPath()};
protected static BrokerController createBrokerController() {
ProxyConfig config = ConfigurationManager.getProxyConfig();
List<String> brokerStartupArgList = Lists.newArrayList("-c", config.getBrokerConfigPath());
if (StringUtils.isNotBlank(config.getNamesrvAddr())) {
brokerStartupArgList.add("-n");
brokerStartupArgList.add(config.getNamesrvAddr());
}
String[] brokerStartupArgs = brokerStartupArgList.toArray(new String[0]);
return BrokerStartup.createBrokerController(brokerStartupArgs);
}
@@ -26,6 +26,7 @@ import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.concurrent.atomic.AtomicReference;
import org.apache.commons.lang3.StringUtils;
import org.apache.rocketmq.common.constant.LoggerName;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -33,37 +34,38 @@ import org.slf4j.LoggerFactory;
public class Configuration {
private final static Logger log = LoggerFactory.getLogger(LoggerName.PROXY_LOGGER_NAME);
private final AtomicReference<ProxyConfig> proxyConfigReference = new AtomicReference<>();
public static final String CONFIG_PATH_PROPERTY = "com.rocketmq.proxy.configPath";
public void init() throws Exception {
String proxyConfigData = loadJsonConfig(ProxyConfig.CONFIG_FILE_NAME);
if (null == proxyConfigData) {
throw new RuntimeException(String.format("load configuration from file: %s error.", ProxyConfig.CONFIG_FILE_NAME));
}
String proxyConfigData = loadJsonConfig();
ProxyConfig proxyConfig = JSON.parseObject(proxyConfigData, ProxyConfig.class);
proxyConfig.initData();
setProxyConfig(proxyConfig);
}
public static String loadJsonConfig(String configFileName) throws Exception {
final String testResource = "rmq-proxy-home/conf/" + configFileName;
try (InputStream inputStream = Configuration.class.getClassLoader().getResourceAsStream(testResource)) {
if (null != inputStream) {
return CharStreams.toString(new InputStreamReader(inputStream, Charsets.UTF_8));
public static String loadJsonConfig() throws Exception {
String configFileName = ProxyConfig.DEFAULT_CONFIG_FILE_NAME;
String filePath = System.getProperty(CONFIG_PATH_PROPERTY);
if (StringUtils.isBlank(filePath)) {
final String testResource = "rmq-proxy-home/conf/" + configFileName;
try (InputStream inputStream = Configuration.class.getClassLoader().getResourceAsStream(testResource)) {
if (null != inputStream) {
return CharStreams.toString(new InputStreamReader(inputStream, Charsets.UTF_8));
}
}
filePath = new File(ConfigurationManager.getProxyHome() + File.separator + "conf", configFileName).toString();
}
String filePath = new File(ConfigurationManager.getProxyHome() + File.separator + "conf", configFileName).toString();
File file = new File(filePath);
if (!file.exists()) {
log.warn("the config file {} not exist", filePath);
return null;
throw new RuntimeException(String.format("the config file %s not exist", filePath));
}
long fileLength = file.length();
if (fileLength <= 0) {
log.warn("the config file {} length is zero", filePath);
return null;
throw new RuntimeException(String.format("the config file %s length is zero", filePath));
}
return new String(Files.readAllBytes(file.toPath()), StandardCharsets.UTF_8);
@@ -25,6 +25,7 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import org.apache.rocketmq.common.MixAll;
import org.apache.rocketmq.common.constant.LoggerName;
import org.apache.rocketmq.proxy.ProxyMode;
import org.slf4j.Logger;
@@ -32,7 +33,7 @@ import org.slf4j.LoggerFactory;
public class ProxyConfig implements ConfigFile {
private final static Logger log = LoggerFactory.getLogger(LoggerName.PROXY_LOGGER_NAME);
public final static String CONFIG_FILE_NAME = "rmq-proxy.json";
public final static String DEFAULT_CONFIG_FILE_NAME = "rmq-proxy.json";
private static final int PROCESSOR_NUMBER = Runtime.getRuntime().availableProcessors();
private String rocketMQClusterName = "";
@@ -44,9 +45,9 @@ public class ProxyConfig implements ConfigFile {
private long printJstackInMillis = Duration.ofSeconds(60).toMillis();
private long printThreadPoolStatusInMillis = Duration.ofSeconds(3).toMillis();
private String nameSrvAddr = "";
private String nameSrvDomain = "";
private String nameSrvDomainSubgroup = "";
private String namesrvAddr = System.getProperty(MixAll.NAMESRV_ADDR_PROPERTY, System.getenv(MixAll.NAMESRV_ADDR_ENV));
private String namesrvDomain = "";
private String namesrvDomainSubgroup = "";
/**
* gRPC
*/
@@ -234,28 +235,28 @@ public class ProxyConfig implements ConfigFile {
this.printThreadPoolStatusInMillis = printThreadPoolStatusInMillis;
}
public String getNameSrvAddr() {
return nameSrvAddr;
public String getNamesrvAddr() {
return namesrvAddr;
}
public void setNameSrvAddr(String nameSrvAddr) {
this.nameSrvAddr = nameSrvAddr;
public void setNamesrvAddr(String namesrvAddr) {
this.namesrvAddr = namesrvAddr;
}
public String getNameSrvDomain() {
return nameSrvDomain;
public String getNamesrvDomain() {
return namesrvDomain;
}
public void setNameSrvDomain(String nameSrvDomain) {
this.nameSrvDomain = nameSrvDomain;
public void setNamesrvDomain(String namesrvDomain) {
this.namesrvDomain = namesrvDomain;
}
public String getNameSrvDomainSubgroup() {
return nameSrvDomainSubgroup;
public String getNamesrvDomainSubgroup() {
return namesrvDomainSubgroup;
}
public void setNameSrvDomainSubgroup(String nameSrvDomainSubgroup) {
this.nameSrvDomainSubgroup = nameSrvDomainSubgroup;
public void setNamesrvDomainSubgroup(String namesrvDomainSubgroup) {
this.namesrvDomainSubgroup = namesrvDomainSubgroup;
}
public String getProxyMode() {
@@ -54,11 +54,11 @@ public class MQClientAPIFactory implements StartAndShutdown {
protected void init() {
System.setProperty(ClientConfig.SEND_MESSAGE_WITH_VIP_CHANNEL_PROPERTY, "false");
ProxyConfig proxyConfig = ConfigurationManager.getProxyConfig();
if (StringUtils.isEmpty(proxyConfig.getNameSrvDomain())) {
System.setProperty(MixAll.NAMESRV_ADDR_PROPERTY, proxyConfig.getNameSrvAddr());
if (StringUtils.isEmpty(proxyConfig.getNamesrvDomain())) {
System.setProperty(MixAll.NAMESRV_ADDR_PROPERTY, proxyConfig.getNamesrvAddr());
} else {
System.setProperty("rocketmq.namesrv.domain", proxyConfig.getNameSrvDomain());
System.setProperty("rocketmq.namesrv.domain.subgroup", proxyConfig.getNameSrvDomainSubgroup());
System.setProperty("rocketmq.namesrv.domain", proxyConfig.getNamesrvDomain());
System.setProperty("rocketmq.namesrv.domain.subgroup", proxyConfig.getNamesrvDomainSubgroup());
}
}
@@ -0,0 +1,220 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.rocketmq.proxy;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import org.apache.rocketmq.broker.BrokerController;
import org.apache.rocketmq.broker.BrokerStartup;
import org.apache.rocketmq.client.log.ClientLogger;
import org.apache.rocketmq.common.MixAll;
import org.apache.rocketmq.proxy.config.Configuration;
import org.apache.rocketmq.proxy.config.ConfigurationManager;
import org.apache.rocketmq.proxy.config.ProxyConfig;
import org.apache.rocketmq.proxy.processor.DefaultMessagingProcessor;
import org.assertj.core.util.Strings;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.MockedStatic;
import static org.apache.rocketmq.proxy.config.ConfigurationManager.RMQ_PROXY_HOME;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mockStatic;
public class ProxyStartupTest {
public static String mockProxyHome = "/mock/rmq/proxy/home";
@Before
public void before() throws Throwable {
URL mockProxyHomeURL = getClass().getClassLoader().getResource("rmq-proxy-home");
if (mockProxyHomeURL != null) {
mockProxyHome = mockProxyHomeURL.toURI().getPath();
}
if (!Strings.isNullOrEmpty(mockProxyHome)) {
System.setProperty(RMQ_PROXY_HOME, mockProxyHome);
}
}
@After
public void after() {
System.clearProperty(RMQ_PROXY_HOME);
System.clearProperty(MixAll.NAMESRV_ADDR_PROPERTY);
System.clearProperty(Configuration.CONFIG_PATH_PROPERTY);
System.clearProperty(ClientLogger.CLIENT_LOG_USESLF4J);
}
@Test
public void testParseAndInitCommandLineArgument() throws Exception {
Path configFilePath = Files.createTempFile("testParseAndInitCommandLineArgument", ".json");
String configData = "{}";
Files.write(configFilePath, configData.getBytes(StandardCharsets.UTF_8));
String brokerConfigPath = "brokerConfigPath";
String proxyConfigPath = configFilePath.toAbsolutePath().toString();
String proxyMode = "LOCAL";
String namesrvAddr = "namesrvAddr";
CommandLineArgument commandLineArgument = ProxyStartup.parseCommandLineArgument(new String[] {
"-bc", brokerConfigPath,
"-pc", proxyConfigPath,
"-pm", proxyMode,
"-n", namesrvAddr
});
assertEquals(brokerConfigPath, commandLineArgument.getBrokerConfigPath());
assertEquals(proxyConfigPath, commandLineArgument.getProxyConfigPath());
assertEquals(proxyMode, commandLineArgument.getProxyMode());
assertEquals(namesrvAddr, commandLineArgument.getNamesrvAddr());
ProxyStartup.initLogAndConfiguration(commandLineArgument);
ProxyConfig config = ConfigurationManager.getProxyConfig();
assertEquals(brokerConfigPath, config.getBrokerConfigPath());
assertEquals(proxyMode, config.getProxyMode());
assertEquals(namesrvAddr, config.getNamesrvAddr());
}
@Test
public void testLocalModeWithNameSrvAddrByProperty() throws Exception {
String namesrvAddr = "namesrvAddr";
System.setProperty(MixAll.NAMESRV_ADDR_PROPERTY, namesrvAddr);
CommandLineArgument commandLineArgument = ProxyStartup.parseCommandLineArgument(new String[] {
"-pm", "local"
});
ProxyStartup.initLogAndConfiguration(commandLineArgument);
ProxyConfig config = ConfigurationManager.getProxyConfig();
assertEquals(namesrvAddr, config.getNamesrvAddr());
validateBrokerCreateArgsWithNamsrvAddr(config, namesrvAddr);
}
private void validateBrokerCreateArgsWithNamsrvAddr(ProxyConfig config, String namesrvAddr) {
try (MockedStatic<BrokerStartup> brokerStartupMocked = mockStatic(BrokerStartup.class);
MockedStatic<DefaultMessagingProcessor> messagingProcessorMocked = mockStatic(DefaultMessagingProcessor.class)) {
ArgumentCaptor<Object> args = ArgumentCaptor.forClass(Object.class);
brokerStartupMocked.when(() -> BrokerStartup.createBrokerController((String[]) args.capture()))
.thenReturn(mock(BrokerController.class));
messagingProcessorMocked.when(() -> DefaultMessagingProcessor.createForLocalMode(any(), any()))
.thenReturn(mock(DefaultMessagingProcessor.class));
ProxyStartup.createMessagingProcessor();
String[] passArgs = (String[]) args.getValue();
assertEquals("-c", passArgs[0]);
assertEquals(config.getBrokerConfigPath(), passArgs[1]);
assertEquals("-n", passArgs[2]);
assertEquals(namesrvAddr, passArgs[3]);
assertEquals(4, passArgs.length);
}
}
@Test
public void testLocalModeWithNameSrvAddrByConfigFile() throws Exception {
String namesrvAddr = "namesrvAddr";
System.setProperty(MixAll.NAMESRV_ADDR_PROPERTY, "foo");
Path configFilePath = Files.createTempFile("testLocalModeWithNameSrvAddrByConfigFile", ".json");
String configData = "{\n" +
" \"namesrvAddr\": \"namesrvAddr\"\n" +
"}";
Files.write(configFilePath, configData.getBytes(StandardCharsets.UTF_8));
CommandLineArgument commandLineArgument = ProxyStartup.parseCommandLineArgument(new String[] {
"-pm", "local",
"-pc", configFilePath.toAbsolutePath().toString()
});
ProxyStartup.initLogAndConfiguration(commandLineArgument);
ProxyConfig config = ConfigurationManager.getProxyConfig();
assertEquals(namesrvAddr, config.getNamesrvAddr());
validateBrokerCreateArgsWithNamsrvAddr(config, namesrvAddr);
}
@Test
public void testLocalModeWithNameSrvAddrByCommandLine() throws Exception {
String namesrvAddr = "namesrvAddr";
System.setProperty(MixAll.NAMESRV_ADDR_PROPERTY, "foo");
Path configFilePath = Files.createTempFile("testLocalModeWithNameSrvAddrByCommandLine", ".json");
String configData = "{\n" +
" \"namesrvAddr\": \"foo\"\n" +
"}";
Files.write(configFilePath, configData.getBytes(StandardCharsets.UTF_8));
CommandLineArgument commandLineArgument = ProxyStartup.parseCommandLineArgument(new String[] {
"-pm", "local",
"-pc", configFilePath.toAbsolutePath().toString(),
"-n", namesrvAddr
});
ProxyStartup.initLogAndConfiguration(commandLineArgument);
ProxyConfig config = ConfigurationManager.getProxyConfig();
assertEquals(namesrvAddr, config.getNamesrvAddr());
validateBrokerCreateArgsWithNamsrvAddr(config, namesrvAddr);
}
@Test
public void testLocalModeWithAllArgs() throws Exception {
String namesrvAddr = "namesrvAddr";
System.setProperty(MixAll.NAMESRV_ADDR_PROPERTY, "foo");
Path configFilePath = Files.createTempFile("testLocalMode", ".json");
String configData = "{\n" +
" \"namesrvAddr\": \"foo\"\n" +
"}";
Files.write(configFilePath, configData.getBytes(StandardCharsets.UTF_8));
Path brokerConfigFilePath = Files.createTempFile("testLocalModeBrokerConfig", ".json");
CommandLineArgument commandLineArgument = ProxyStartup.parseCommandLineArgument(new String[] {
"-pm", "local",
"-pc", configFilePath.toAbsolutePath().toString(),
"-n", namesrvAddr,
"-bc", brokerConfigFilePath.toAbsolutePath().toString()
});
ProxyStartup.initLogAndConfiguration(commandLineArgument);
ProxyConfig config = ConfigurationManager.getProxyConfig();
assertEquals(namesrvAddr, config.getNamesrvAddr());
assertEquals(brokerConfigFilePath.toAbsolutePath().toString(), config.getBrokerConfigPath());
validateBrokerCreateArgsWithNamsrvAddr(config, namesrvAddr);
}
@Test
public void testClusterMode() throws Exception {
CommandLineArgument commandLineArgument = ProxyStartup.parseCommandLineArgument(new String[] {
"-pm", "cluster"
});
ProxyStartup.initLogAndConfiguration(commandLineArgument);
try (MockedStatic<DefaultMessagingProcessor> messagingProcessorMocked = mockStatic(DefaultMessagingProcessor.class)) {
DefaultMessagingProcessor processor = mock(DefaultMessagingProcessor.class);
messagingProcessorMocked.when(DefaultMessagingProcessor::createForClusterMode)
.thenReturn(processor);
assertSame(processor, ProxyStartup.createMessagingProcessor());
}
}
}
@@ -114,7 +114,7 @@ public class LocalMessageServiceTest extends InitConfigAndLoggerTest {
@Before
public void setUp() throws Throwable {
super.before();
ConfigurationManager.getProxyConfig().setNameSrvAddr("1.1.1.1");
ConfigurationManager.getProxyConfig().setNamesrvAddr("1.1.1.1");
channelManager = new ChannelManager();
Mockito.when(brokerControllerMock.getSendMessageProcessor()).thenReturn(sendMessageProcessorMock);
Mockito.when(brokerControllerMock.getPopMessageProcessor()).thenReturn(popMessageProcessorMock);
@@ -0,0 +1 @@
mock-maker-inline
@@ -152,7 +152,7 @@ public class GrpcBaseIT extends BaseConf {
ConfigurationManager.initEnv();
ConfigurationManager.intConfig();
ConfigurationManager.getProxyConfig().setNameSrvAddr(nsAddr);
ConfigurationManager.getProxyConfig().setNamesrvAddr(nsAddr);
// Set LongPollingReserveTimeInMillis to 500ms to reserve more time for IT
ConfigurationManager.getProxyConfig().setLongPollingReserveTimeInMillis(500);
ConfigurationManager.getProxyConfig().setRocketMQClusterName(brokerController1.getBrokerConfig().getBrokerClusterName());