mirror of
https://github.com/jbcr/Win32ServiceBundle.git
synced 2026-03-24 00:42:20 +01:00
fix colision service name
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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>
|
||||
*/
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
win32_service:
|
||||
project_code: demo
|
||||
messenger:
|
||||
-
|
||||
receivers: [async]
|
||||
limit: 10
|
||||
displayed_name: Demo Messenger Consumer Async
|
||||
thread_count: 2
|
||||
|
||||
|
||||
Reference in New Issue
Block a user