|
1 | 1 | import { isMeteorError, MeteorError } from '@rocket.chat/core-services'; |
2 | 2 | import EJSON from 'ejson'; |
| 3 | +import type Moleculer from 'moleculer'; |
3 | 4 | import { Errors, Serializers, ServiceBroker } from 'moleculer'; |
4 | 5 | import { pino } from 'pino'; |
5 | 6 |
|
@@ -70,82 +71,85 @@ class EJSONSerializer extends Base { |
70 | 71 | } |
71 | 72 | } |
72 | 73 |
|
73 | | -const network = new ServiceBroker({ |
74 | | - namespace: MS_NAMESPACE, |
75 | | - skipProcessEventRegistration: SKIP_PROCESS_EVENT_REGISTRATION === 'true', |
76 | | - transporter: TRANSPORTER, |
77 | | - metrics: { |
78 | | - enabled: MS_METRICS === 'true', |
79 | | - reporter: [ |
80 | | - { |
81 | | - type: 'Prometheus', |
82 | | - options: { |
83 | | - port: MS_METRICS_PORT, |
| 74 | +export function startBroker(options: Moleculer.BrokerOptions = {}): NetworkBroker { |
| 75 | + const network = new ServiceBroker({ |
| 76 | + namespace: MS_NAMESPACE, |
| 77 | + skipProcessEventRegistration: SKIP_PROCESS_EVENT_REGISTRATION === 'true', |
| 78 | + transporter: TRANSPORTER, |
| 79 | + metrics: { |
| 80 | + enabled: MS_METRICS === 'true', |
| 81 | + reporter: [ |
| 82 | + { |
| 83 | + type: 'Prometheus', |
| 84 | + options: { |
| 85 | + port: MS_METRICS_PORT, |
| 86 | + }, |
84 | 87 | }, |
85 | | - }, |
86 | | - ], |
87 | | - }, |
88 | | - cacher: CACHE, |
89 | | - serializer: SERIALIZER === 'EJSON' ? new EJSONSerializer() : SERIALIZER, |
90 | | - logger: { |
91 | | - type: 'Pino', |
92 | | - options: { |
93 | | - level: MOLECULER_LOG_LEVEL, |
94 | | - pino: { |
95 | | - options: { |
96 | | - timestamp: pino.stdTimeFunctions.isoTime, |
97 | | - ...(process.env.NODE_ENV !== 'production' |
98 | | - ? { |
99 | | - transport: { |
100 | | - target: 'pino-pretty', |
101 | | - options: { |
102 | | - colorize: true, |
| 88 | + ], |
| 89 | + }, |
| 90 | + cacher: CACHE, |
| 91 | + serializer: SERIALIZER === 'EJSON' ? new EJSONSerializer() : SERIALIZER, |
| 92 | + logger: { |
| 93 | + type: 'Pino', |
| 94 | + options: { |
| 95 | + level: MOLECULER_LOG_LEVEL, |
| 96 | + pino: { |
| 97 | + options: { |
| 98 | + timestamp: pino.stdTimeFunctions.isoTime, |
| 99 | + ...(process.env.NODE_ENV !== 'production' |
| 100 | + ? { |
| 101 | + transport: { |
| 102 | + target: 'pino-pretty', |
| 103 | + options: { |
| 104 | + colorize: true, |
| 105 | + }, |
103 | 106 | }, |
104 | | - }, |
105 | | - } |
106 | | - : {}), |
| 107 | + } |
| 108 | + : {}), |
| 109 | + }, |
107 | 110 | }, |
108 | 111 | }, |
109 | 112 | }, |
110 | | - }, |
111 | | - registry: { |
112 | | - strategy: BALANCE_STRATEGY, |
113 | | - preferLocal: BALANCE_PREFER_LOCAL !== 'false', |
114 | | - }, |
115 | | - |
116 | | - requestTimeout: parseInt(REQUEST_TIMEOUT) * 1000, |
117 | | - retryPolicy: { |
118 | | - enabled: RETRY_ENABLED === 'true', |
119 | | - retries: parseInt(RETRY_RETRIES), |
120 | | - delay: parseInt(RETRY_DELAY), |
121 | | - maxDelay: parseInt(RETRY_MAX_DELAY), |
122 | | - factor: parseInt(RETRY_FACTOR), |
123 | | - check: (err: any): boolean => err && !!err.retryable, |
124 | | - }, |
125 | | - |
126 | | - maxCallLevel: 100, |
127 | | - heartbeatInterval: parseInt(HEARTBEAT_INTERVAL), |
128 | | - heartbeatTimeout: parseInt(HEARTBEAT_TIMEOUT), |
129 | | - |
130 | | - // circuitBreaker: { |
131 | | - // enabled: false, |
132 | | - // threshold: 0.5, |
133 | | - // windowTime: 60, |
134 | | - // minRequestCount: 20, |
135 | | - // halfOpenTime: 10 * 1000, |
136 | | - // check: (err: any): boolean => err && err.code >= 500, |
137 | | - // }, |
138 | | - |
139 | | - bulkhead: { |
140 | | - enabled: BULKHEAD_ENABLED === 'true', |
141 | | - concurrency: parseInt(BULKHEAD_CONCURRENCY), |
142 | | - maxQueueSize: parseInt(BULKHEAD_MAX_QUEUE_SIZE), |
143 | | - }, |
144 | | - |
145 | | - errorRegenerator: new CustomRegenerator(), |
146 | | - started(): void { |
147 | | - console.log('NetworkBroker started successfully.'); |
148 | | - }, |
149 | | -}); |
150 | | - |
151 | | -export const broker = new NetworkBroker(network); |
| 113 | + registry: { |
| 114 | + strategy: BALANCE_STRATEGY, |
| 115 | + preferLocal: BALANCE_PREFER_LOCAL !== 'false', |
| 116 | + }, |
| 117 | + |
| 118 | + requestTimeout: parseInt(REQUEST_TIMEOUT) * 1000, |
| 119 | + retryPolicy: { |
| 120 | + enabled: RETRY_ENABLED === 'true', |
| 121 | + retries: parseInt(RETRY_RETRIES), |
| 122 | + delay: parseInt(RETRY_DELAY), |
| 123 | + maxDelay: parseInt(RETRY_MAX_DELAY), |
| 124 | + factor: parseInt(RETRY_FACTOR), |
| 125 | + check: (err: any): boolean => err && !!err.retryable, |
| 126 | + }, |
| 127 | + |
| 128 | + maxCallLevel: 100, |
| 129 | + heartbeatInterval: parseInt(HEARTBEAT_INTERVAL), |
| 130 | + heartbeatTimeout: parseInt(HEARTBEAT_TIMEOUT), |
| 131 | + |
| 132 | + // circuitBreaker: { |
| 133 | + // enabled: false, |
| 134 | + // threshold: 0.5, |
| 135 | + // windowTime: 60, |
| 136 | + // minRequestCount: 20, |
| 137 | + // halfOpenTime: 10 * 1000, |
| 138 | + // check: (err: any): boolean => err && err.code >= 500, |
| 139 | + // }, |
| 140 | + |
| 141 | + bulkhead: { |
| 142 | + enabled: BULKHEAD_ENABLED === 'true', |
| 143 | + concurrency: parseInt(BULKHEAD_CONCURRENCY), |
| 144 | + maxQueueSize: parseInt(BULKHEAD_MAX_QUEUE_SIZE), |
| 145 | + }, |
| 146 | + |
| 147 | + errorRegenerator: new CustomRegenerator(), |
| 148 | + started(): void { |
| 149 | + console.log('NetworkBroker started successfully.'); |
| 150 | + }, |
| 151 | + ...options, |
| 152 | + }); |
| 153 | + |
| 154 | + return new NetworkBroker(network); |
| 155 | +} |
0 commit comments