fix colision service name

This commit is contained in:
jb cr
2024-07-26 14:51:10 +02:00
parent 1833f89af2
commit 985288b312
4 changed files with 28 additions and 6 deletions

View File

@@ -20,6 +20,13 @@ class Configuration implements ConfigurationInterface
$treeBuilder->getRootNode()
->children()
->scalarNode('windows_local_encoding')->defaultValue('ISO-8859-15')->end()
->scalarNode('project_code')->isRequired()->cannotBeEmpty()->info('Project specific code to distinguish service ID')
->validate()
->ifTrue(function ($value) {
return \is_string($value) === false || \strlen($value) > 5 || \strlen($value) < 2;
})->thenInvalid('Invalid project code (string length between 2 and 5 chars)')
->end()
->end()
->arrayNode('logging_extra')
->addDefaultsIfNotSet()
->children()

View File

@@ -22,7 +22,7 @@ use Win32ServiceBundle\Model\MessengerServiceRunner;
class Win32ServiceExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
public function load(array $configs, ContainerBuilder $container): void
{
$configuration = new Configuration();
@@ -30,7 +30,7 @@ class Win32ServiceExtension extends Extension
$config = $this->processMessengerConfig($config);
$container->setParameter('win32service.config', $config);
$this->processMessenger($config['messenger'], $container);
$this->processMessenger($config['messenger'], $config['project_code'], $container);
$loader = new YamlFileLoader($container, new FileLocator(\dirname(__DIR__).'/Resources/config'));
$loader->load('services.yaml');
@@ -71,10 +71,14 @@ class Win32ServiceExtension extends Extension
$definition->addTag('monolog.processor');
}
public function processMessenger(array $messengerConfig, ContainerBuilder $container): void
public function processMessenger(array $messengerConfig, string $projectCode, ContainerBuilder $container): void
{
foreach ($messengerConfig as $service) {
$name = sprintf(MessengerServiceRunner::SERVICE_TAG_PATTERN, implode('_', $service['receivers']));
$name = sprintf(
MessengerServiceRunner::SERVICE_TAG_PATTERN,
$projectCode,
implode('_', $service['receivers'])
);
$arguments = [
$service,
new AbstractArgument('Routable message bus'),
@@ -96,6 +100,15 @@ class Win32ServiceExtension extends Extension
private function processMessengerConfig(array $config): array
{
foreach ($config['messenger'] as $service) {
$strlen = \strlen((string) ($service['thread_count'] - 1)) - 2;
$templatedName = sprintf(
MessengerServiceRunner::SERVICE_TAG_PATTERN,
$config['project_code'],
implode('_', $service['receivers'])
);
if (($totalLength = $strlen + \strlen($templatedName)) > 80) {
throw new \Win32ServiceException(sprintf('The future service identity length "%s" is over 80 chars (%d). Reduce the project code or "receivers" number or name length to keep less than 80 chars.', sprintf($templatedName, $service['thread_count'] - 1), $totalLength));
}
$config['services'][] = [
'machine' => $service['machine'],
'displayed_name' => $service['displayed_name'],
@@ -105,7 +118,7 @@ class Win32ServiceExtension extends Extension
'thread_count' => $service['thread_count'],
'script_path' => null,
'script_params' => '',
'service_id' => sprintf(MessengerServiceRunner::SERVICE_TAG_PATTERN, implode('_', $service['receivers'])),
'service_id' => $templatedName,
'recovery' => [
'enable' => true,
'delay' => 100,

View File

@@ -33,7 +33,7 @@ use Win32ServiceBundle\MessengerSubscriber\StopWorkerOnTimeLimitListener;
final class MessengerServiceRunner extends AbstractServiceRunner
{
public const SERVICE_TAG_PATTERN = 'win32service.messenger.%s.%%s';
public const SERVICE_TAG_PATTERN = 'win32service.%s.messenger.%s.%%s';
/**
* @var array<string, ReceiverInterface>
*/

View File

@@ -1,7 +1,9 @@
win32_service:
project_code: demo
messenger:
-
receivers: [async]
limit: 10
displayed_name: Demo Messenger Consumer Async
thread_count: 2